tcw-cli 2.3.0__tar.gz → 2.4.0__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 (177) hide show
  1. {tcw_cli-2.3.0 → tcw_cli-2.4.0}/PKG-INFO +80 -48
  2. {tcw_cli-2.3.0 → tcw_cli-2.4.0}/README.md +79 -47
  3. {tcw_cli-2.3.0 → tcw_cli-2.4.0}/pyproject.toml +2 -2
  4. tcw_cli-2.4.0/tcw/__init__.py +1 -0
  5. tcw_cli-2.4.0/tcw/harness.py +104 -0
  6. {tcw_cli-2.3.0 → tcw_cli-2.4.0}/tcw/serve/__init__.py +5 -5
  7. {tcw_cli-2.3.0 → tcw_cli-2.4.0}/tcw/store/base.py +234 -24
  8. {tcw_cli-2.3.0 → tcw_cli-2.4.0}/tcw/store/fs.py +147 -23
  9. {tcw_cli-2.3.0 → tcw_cli-2.4.0}/tcw/taxonomy/cli.py +0 -4
  10. {tcw_cli-2.3.0 → tcw_cli-2.4.0}/tcw/tracker/claim.py +1 -1
  11. {tcw_cli-2.3.0 → tcw_cli-2.4.0}/tcw/tracker/intake.py +21 -5
  12. {tcw_cli-2.3.0 → tcw_cli-2.4.0}/tcw/tracker/jira.py +12 -2
  13. tcw_cli-2.4.0/tcw/tracker/ownership.py +193 -0
  14. {tcw_cli-2.3.0 → tcw_cli-2.4.0}/tcw/tracker/progress.py +7 -3
  15. tcw_cli-2.4.0/tcw/tracker/sync.py +831 -0
  16. {tcw_cli-2.3.0 → tcw_cli-2.4.0}/tcw/work/cli.py +883 -92
  17. tcw_cli-2.4.0/tcw/work/procedures/audit-backlog.md +125 -0
  18. tcw_cli-2.4.0/tcw/work/procedures/consolidate-plans.md +35 -0
  19. tcw_cli-2.4.0/tcw/work/procedures/create-work.md +153 -0
  20. tcw_cli-2.4.0/tcw/work/procedures/decompose.md +18 -0
  21. tcw_cli-2.4.0/tcw/work/procedures/delegation.md +26 -0
  22. tcw_cli-2.4.0/tcw/work/procedures/documentation-sync.md +100 -0
  23. tcw_cli-2.4.0/tcw/work/procedures/post-mortem.md +41 -0
  24. tcw_cli-2.4.0/tcw/work/procedures/search.md +75 -0
  25. tcw_cli-2.4.0/tcw/work/procedures/triage-issues.md +211 -0
  26. tcw_cli-2.4.0/tcw/work/procedures/unattended-work.md +38 -0
  27. {tcw_cli-2.3.0 → tcw_cli-2.4.0}/tcw/work/projection.py +1 -2
  28. {tcw_cli-2.3.0 → tcw_cli-2.4.0}/tcw/work/prompts/verify.md +0 -2
  29. {tcw_cli-2.3.0 → tcw_cli-2.4.0}/tcw/work/resolve.py +55 -11
  30. {tcw_cli-2.3.0 → tcw_cli-2.4.0}/tcw/work/templates.py +1 -1
  31. {tcw_cli-2.3.0 → tcw_cli-2.4.0}/tcw_cli.egg-info/PKG-INFO +80 -48
  32. {tcw_cli-2.3.0 → tcw_cli-2.4.0}/tcw_cli.egg-info/SOURCES.txt +25 -1
  33. {tcw_cli-2.3.0 → tcw_cli-2.4.0}/tests/test_configuration_text_home.py +7 -7
  34. {tcw_cli-2.3.0 → tcw_cli-2.4.0}/tests/test_documentation_config.py +1 -1
  35. {tcw_cli-2.3.0 → tcw_cli-2.4.0}/tests/test_documentation_sync_wiring.py +7 -7
  36. {tcw_cli-2.3.0 → tcw_cli-2.4.0}/tests/test_documented_cli_surface.py +3 -3
  37. tcw_cli-2.4.0/tests/test_dynamic_skill_marker.py +118 -0
  38. tcw_cli-2.4.0/tests/test_edit_type.py +127 -0
  39. {tcw_cli-2.3.0 → tcw_cli-2.4.0}/tests/test_eval_fixture.py +1 -1
  40. {tcw_cli-2.3.0 → tcw_cli-2.4.0}/tests/test_eval_grading.py +19 -9
  41. tcw_cli-2.4.0/tests/test_harness.py +65 -0
  42. {tcw_cli-2.3.0 → tcw_cli-2.4.0}/tests/test_non_git_writes.py +1 -1
  43. {tcw_cli-2.3.0 → tcw_cli-2.4.0}/tests/test_plugin_manifests.py +94 -40
  44. tcw_cli-2.4.0/tests/test_procedure_config.py +148 -0
  45. tcw_cli-2.4.0/tests/test_procedure_verb.py +194 -0
  46. {tcw_cli-2.3.0 → tcw_cli-2.4.0}/tests/test_repo_lifecycle.py +1 -1
  47. tcw_cli-2.4.0/tests/test_resolve_procedure.py +79 -0
  48. {tcw_cli-2.3.0 → tcw_cli-2.4.0}/tests/test_serve_write.py +21 -1
  49. tcw_cli-2.4.0/tests/test_shipped_procedures.py +165 -0
  50. {tcw_cli-2.3.0 → tcw_cli-2.4.0}/tests/test_shipped_prompts.py +7 -2
  51. {tcw_cli-2.3.0 → tcw_cli-2.4.0}/tests/test_skill_flow.py +1 -1
  52. {tcw_cli-2.3.0 → tcw_cli-2.4.0}/tests/test_skill_lifecycle_parity.py +89 -23
  53. {tcw_cli-2.3.0 → tcw_cli-2.4.0}/tests/test_skill_path_pointers.py +2 -2
  54. tcw_cli-2.4.0/tests/test_stage_validate.py +165 -0
  55. {tcw_cli-2.3.0 → tcw_cli-2.4.0}/tests/test_stage_verb.py +1 -1
  56. {tcw_cli-2.3.0 → tcw_cli-2.4.0}/tests/test_taxonomy.py +108 -0
  57. {tcw_cli-2.3.0 → tcw_cli-2.4.0}/tests/test_tracker_absent.py +25 -0
  58. {tcw_cli-2.3.0 → tcw_cli-2.4.0}/tests/test_tracker_claim.py +22 -1
  59. {tcw_cli-2.3.0 → tcw_cli-2.4.0}/tests/test_tracker_cli.py +211 -1
  60. {tcw_cli-2.3.0 → tcw_cli-2.4.0}/tests/test_tracker_client.py +13 -1
  61. {tcw_cli-2.3.0 → tcw_cli-2.4.0}/tests/test_tracker_comment.py +21 -3
  62. tcw_cli-2.4.0/tests/test_tracker_config.py +364 -0
  63. {tcw_cli-2.3.0 → tcw_cli-2.4.0}/tests/test_tracker_help.py +36 -8
  64. tcw_cli-2.4.0/tests/test_tracker_hold.py +284 -0
  65. {tcw_cli-2.3.0 → tcw_cli-2.4.0}/tests/test_tracker_import.py +109 -1
  66. {tcw_cli-2.3.0 → tcw_cli-2.4.0}/tests/test_tracker_inheritance.py +30 -4
  67. tcw_cli-2.4.0/tests/test_tracker_ownership.py +289 -0
  68. {tcw_cli-2.3.0 → tcw_cli-2.4.0}/tests/test_tracker_strict.py +127 -7
  69. tcw_cli-2.4.0/tests/test_tracker_sync.py +2257 -0
  70. {tcw_cli-2.3.0 → tcw_cli-2.4.0}/tests/test_tracker_sync_config.py +1 -1
  71. {tcw_cli-2.3.0 → tcw_cli-2.4.0}/tests/test_tracker_validate.py +31 -1
  72. tcw_cli-2.4.0/tests/test_unattended_work_skill.py +70 -0
  73. {tcw_cli-2.3.0 → tcw_cli-2.4.0}/tests/test_work.py +19 -0
  74. tcw_cli-2.4.0/tests/test_worktree_completion.py +406 -0
  75. tcw_cli-2.3.0/tcw/__init__.py +0 -1
  76. tcw_cli-2.3.0/tcw/tracker/sync.py +0 -410
  77. tcw_cli-2.3.0/tests/test_tracker_config.py +0 -191
  78. tcw_cli-2.3.0/tests/test_tracker_sync.py +0 -965
  79. {tcw_cli-2.3.0 → tcw_cli-2.4.0}/LICENSE +0 -0
  80. {tcw_cli-2.3.0 → tcw_cli-2.4.0}/setup.cfg +0 -0
  81. {tcw_cli-2.3.0 → tcw_cli-2.4.0}/tcw/capabilities/__init__.py +0 -0
  82. {tcw_cli-2.3.0 → tcw_cli-2.4.0}/tcw/capabilities/cli.py +0 -0
  83. {tcw_cli-2.3.0 → tcw_cli-2.4.0}/tcw/cli.py +0 -0
  84. {tcw_cli-2.3.0 → tcw_cli-2.4.0}/tcw/refs.py +0 -0
  85. {tcw_cli-2.3.0 → tcw_cli-2.4.0}/tcw/serve/dist/client/assets/index-CCjF_dHr.js +0 -0
  86. {tcw_cli-2.3.0 → tcw_cli-2.4.0}/tcw/serve/dist/client/assets/index-CXNiOIeg.css +0 -0
  87. {tcw_cli-2.3.0 → tcw_cli-2.4.0}/tcw/serve/dist/client/index.html +0 -0
  88. {tcw_cli-2.3.0 → tcw_cli-2.4.0}/tcw/serve/dist/client/theme-init.js +0 -0
  89. {tcw_cli-2.3.0 → tcw_cli-2.4.0}/tcw/serve/dist/server.cjs +0 -0
  90. {tcw_cli-2.3.0 → tcw_cli-2.4.0}/tcw/serve/runtime.py +0 -0
  91. {tcw_cli-2.3.0 → tcw_cli-2.4.0}/tcw/stdin.py +0 -0
  92. {tcw_cli-2.3.0 → tcw_cli-2.4.0}/tcw/store/__init__.py +0 -0
  93. {tcw_cli-2.3.0 → tcw_cli-2.4.0}/tcw/store/checkouts.py +0 -0
  94. {tcw_cli-2.3.0 → tcw_cli-2.4.0}/tcw/store/project.py +0 -0
  95. {tcw_cli-2.3.0 → tcw_cli-2.4.0}/tcw/taxonomy/__init__.py +0 -0
  96. {tcw_cli-2.3.0 → tcw_cli-2.4.0}/tcw/tracker/__init__.py +0 -0
  97. {tcw_cli-2.3.0 → tcw_cli-2.4.0}/tcw/validate.py +0 -0
  98. {tcw_cli-2.3.0 → tcw_cli-2.4.0}/tcw/work/__init__.py +0 -0
  99. {tcw_cli-2.3.0 → tcw_cli-2.4.0}/tcw/work/generate.py +0 -0
  100. {tcw_cli-2.3.0 → tcw_cli-2.4.0}/tcw/work/hooks.py +0 -0
  101. {tcw_cli-2.3.0 → tcw_cli-2.4.0}/tcw/work/prompts/implement.md +0 -0
  102. {tcw_cli-2.3.0 → tcw_cli-2.4.0}/tcw/work/prompts/inbox.md +0 -0
  103. {tcw_cli-2.3.0 → tcw_cli-2.4.0}/tcw/work/prompts/plan.md +0 -0
  104. {tcw_cli-2.3.0 → tcw_cli-2.4.0}/tcw/work/prompts/postmortem.md +0 -0
  105. {tcw_cli-2.3.0 → tcw_cli-2.4.0}/tcw/work/prompts/request.md +0 -0
  106. {tcw_cli-2.3.0 → tcw_cli-2.4.0}/tcw/work/prompts/spec.md +0 -0
  107. {tcw_cli-2.3.0 → tcw_cli-2.4.0}/tcw/work/recursion.py +0 -0
  108. {tcw_cli-2.3.0 → tcw_cli-2.4.0}/tcw_cli.egg-info/dependency_links.txt +0 -0
  109. {tcw_cli-2.3.0 → tcw_cli-2.4.0}/tcw_cli.egg-info/entry_points.txt +0 -0
  110. {tcw_cli-2.3.0 → tcw_cli-2.4.0}/tcw_cli.egg-info/requires.txt +0 -0
  111. {tcw_cli-2.3.0 → tcw_cli-2.4.0}/tcw_cli.egg-info/top_level.txt +0 -0
  112. {tcw_cli-2.3.0 → tcw_cli-2.4.0}/tests/test_body_prompt.py +0 -0
  113. {tcw_cli-2.3.0 → tcw_cli-2.4.0}/tests/test_capabilities.py +0 -0
  114. {tcw_cli-2.3.0 → tcw_cli-2.4.0}/tests/test_capabilities_federation.py +0 -0
  115. {tcw_cli-2.3.0 → tcw_cli-2.4.0}/tests/test_capabilities_reset.py +0 -0
  116. {tcw_cli-2.3.0 → tcw_cli-2.4.0}/tests/test_capabilities_rm.py +0 -0
  117. {tcw_cli-2.3.0 → tcw_cli-2.4.0}/tests/test_capabilities_sidecar.py +0 -0
  118. {tcw_cli-2.3.0 → tcw_cli-2.4.0}/tests/test_capability_ref_wording.py +0 -0
  119. {tcw_cli-2.3.0 → tcw_cli-2.4.0}/tests/test_cli_help_coverage.py +0 -0
  120. {tcw_cli-2.3.0 → tcw_cli-2.4.0}/tests/test_committed_paths.py +0 -0
  121. {tcw_cli-2.3.0 → tcw_cli-2.4.0}/tests/test_cut_version.py +0 -0
  122. {tcw_cli-2.3.0 → tcw_cli-2.4.0}/tests/test_documentation_prompt.py +0 -0
  123. {tcw_cli-2.3.0 → tcw_cli-2.4.0}/tests/test_environment_hardness.py +0 -0
  124. {tcw_cli-2.3.0 → tcw_cli-2.4.0}/tests/test_epic_completable.py +0 -0
  125. {tcw_cli-2.3.0 → tcw_cli-2.4.0}/tests/test_eval_coverage.py +0 -0
  126. {tcw_cli-2.3.0 → tcw_cli-2.4.0}/tests/test_eval_files_changed.py +0 -0
  127. {tcw_cli-2.3.0 → tcw_cli-2.4.0}/tests/test_eval_runner.py +0 -0
  128. {tcw_cli-2.3.0 → tcw_cli-2.4.0}/tests/test_external_work_store.py +0 -0
  129. {tcw_cli-2.3.0 → tcw_cli-2.4.0}/tests/test_falsification_rule.py +0 -0
  130. {tcw_cli-2.3.0 → tcw_cli-2.4.0}/tests/test_generate_hook.py +0 -0
  131. {tcw_cli-2.3.0 → tcw_cli-2.4.0}/tests/test_inbox_title.py +0 -0
  132. {tcw_cli-2.3.0 → tcw_cli-2.4.0}/tests/test_lifecycle_baseline.py +0 -0
  133. {tcw_cli-2.3.0 → tcw_cli-2.4.0}/tests/test_lifecycle_hooks.py +0 -0
  134. {tcw_cli-2.3.0 → tcw_cli-2.4.0}/tests/test_lifecycle_inert.py +0 -0
  135. {tcw_cli-2.3.0 → tcw_cli-2.4.0}/tests/test_lifecycle_policy.py +0 -0
  136. {tcw_cli-2.3.0 → tcw_cli-2.4.0}/tests/test_lifecycle_validation.py +0 -0
  137. {tcw_cli-2.3.0 → tcw_cli-2.4.0}/tests/test_multiproject.py +0 -0
  138. {tcw_cli-2.3.0 → tcw_cli-2.4.0}/tests/test_project_overrides.py +0 -0
  139. {tcw_cli-2.3.0 → tcw_cli-2.4.0}/tests/test_project_registry.py +0 -0
  140. {tcw_cli-2.3.0 → tcw_cli-2.4.0}/tests/test_projection.py +0 -0
  141. {tcw_cli-2.3.0 → tcw_cli-2.4.0}/tests/test_prompt_fallback.py +0 -0
  142. {tcw_cli-2.3.0 → tcw_cli-2.4.0}/tests/test_qualified_ref.py +0 -0
  143. {tcw_cli-2.3.0 → tcw_cli-2.4.0}/tests/test_recursion.py +0 -0
  144. {tcw_cli-2.3.0 → tcw_cli-2.4.0}/tests/test_refs.py +0 -0
  145. {tcw_cli-2.3.0 → tcw_cli-2.4.0}/tests/test_remote_session_setup.py +0 -0
  146. {tcw_cli-2.3.0 → tcw_cli-2.4.0}/tests/test_resolve.py +0 -0
  147. {tcw_cli-2.3.0 → tcw_cli-2.4.0}/tests/test_retention.py +0 -0
  148. {tcw_cli-2.3.0 → tcw_cli-2.4.0}/tests/test_scaffold.py +0 -0
  149. {tcw_cli-2.3.0 → tcw_cli-2.4.0}/tests/test_serve.py +0 -0
  150. {tcw_cli-2.3.0 → tcw_cli-2.4.0}/tests/test_serve_descendants.py +0 -0
  151. {tcw_cli-2.3.0 → tcw_cli-2.4.0}/tests/test_serve_projection.py +0 -0
  152. {tcw_cli-2.3.0 → tcw_cli-2.4.0}/tests/test_serve_resolve.py +0 -0
  153. {tcw_cli-2.3.0 → tcw_cli-2.4.0}/tests/test_serve_runtime.py +0 -0
  154. {tcw_cli-2.3.0 → tcw_cli-2.4.0}/tests/test_session_bootstrap.py +0 -0
  155. {tcw_cli-2.3.0 → tcw_cli-2.4.0}/tests/test_show_json.py +0 -0
  156. {tcw_cli-2.3.0 → tcw_cli-2.4.0}/tests/test_smoke.py +0 -0
  157. {tcw_cli-2.3.0 → tcw_cli-2.4.0}/tests/test_status_parity.py +0 -0
  158. {tcw_cli-2.3.0 → tcw_cli-2.4.0}/tests/test_stdin.py +0 -0
  159. {tcw_cli-2.3.0 → tcw_cli-2.4.0}/tests/test_stdin_cli.py +0 -0
  160. {tcw_cli-2.3.0 → tcw_cli-2.4.0}/tests/test_store_bounds.py +0 -0
  161. {tcw_cli-2.3.0 → tcw_cli-2.4.0}/tests/test_store_editor.py +0 -0
  162. {tcw_cli-2.3.0 → tcw_cli-2.4.0}/tests/test_store_nodes.py +0 -0
  163. {tcw_cli-2.3.0 → tcw_cli-2.4.0}/tests/test_store_provisioning.py +0 -0
  164. {tcw_cli-2.3.0 → tcw_cli-2.4.0}/tests/test_store_publication.py +0 -0
  165. {tcw_cli-2.3.0 → tcw_cli-2.4.0}/tests/test_subprocess_stdin.py +0 -0
  166. {tcw_cli-2.3.0 → tcw_cli-2.4.0}/tests/test_tombstone.py +0 -0
  167. {tcw_cli-2.3.0 → tcw_cli-2.4.0}/tests/test_tracker_binding.py +0 -0
  168. {tcw_cli-2.3.0 → tcw_cli-2.4.0}/tests/test_tracker_claimability.py +0 -0
  169. {tcw_cli-2.3.0 → tcw_cli-2.4.0}/tests/test_tracker_link.py +0 -0
  170. {tcw_cli-2.3.0 → tcw_cli-2.4.0}/tests/test_tracker_replay.py +0 -0
  171. {tcw_cli-2.3.0 → tcw_cli-2.4.0}/tests/test_tracker_surface.py +0 -0
  172. {tcw_cli-2.3.0 → tcw_cli-2.4.0}/tests/test_unpushed_version_script.py +0 -0
  173. {tcw_cli-2.3.0 → tcw_cli-2.4.0}/tests/test_validate.py +0 -0
  174. {tcw_cli-2.3.0 → tcw_cli-2.4.0}/tests/test_validate_target.py +0 -0
  175. {tcw_cli-2.3.0 → tcw_cli-2.4.0}/tests/test_work_autocommit.py +0 -0
  176. {tcw_cli-2.3.0 → tcw_cli-2.4.0}/tests/test_work_review.py +0 -0
  177. {tcw_cli-2.3.0 → tcw_cli-2.4.0}/tests/test_work_tags.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: tcw-cli
3
- Version: 2.3.0
3
+ Version: 2.4.0
4
4
  Summary: Taxonomy · Capabilities · Work — a storage-abstracted framework for describing and evolving a software project.
5
5
  License: Apache License
6
6
  Version 2.0, January 2004
@@ -292,7 +292,7 @@ by installing `tcw-cli` from PyPI with `pipx`, so one installed mid-session
292
292
  cannot run until the next one begins. That first session needs network access. It
293
293
  installs over an existing `pipx install tcw-cli` rather than beside it, and
294
294
  leaves a development checkout (`pip install -e .`) alone. If `tcw` goes missing
295
- anyway, `pipx install tcw-cli` is the whole fix — the **`tcw-setup`** skill
295
+ anyway, `pipx install tcw-cli` is the whole fix — the **`setup`** skill
296
296
  carries the cases where it is not.
297
297
 
298
298
  In **Codex**:
@@ -302,7 +302,7 @@ codex plugin marketplace add brocef/TCW --ref main
302
302
  codex plugin add tcw@tcw
303
303
  ```
304
304
 
305
- Codex has no session-start hook, so ask the agent to run the **`tcw-setup`**
305
+ Codex has no session-start hook, so ask the agent to run the **`setup`**
306
306
  skill — it runs the same install script Claude runs automatically.
307
307
 
308
308
  The plugin ships the skills and read-only review agents described in
@@ -497,11 +497,11 @@ becomes your own `permission`.
497
497
 
498
498
  #### Skills
499
499
 
500
- | Skill | What it does |
501
- | ---------------------------------------------- | --------------------------------------------------------------------------------------------------------- |
502
- | [`tcw-taxonomy`](skills/tcw-taxonomy/SKILL.md) | Guides an agent through declaring vocabulary and features, linking them, and resolving inherited entries. |
500
+ | Skill | What it does |
501
+ | -------------------------------------- | --------------------------------------------------------------------------------------------------------- |
502
+ | [`taxonomy`](skills/taxonomy/SKILL.md) | Guides an agent through declaring vocabulary and features, linking them, and resolving inherited entries. |
503
503
 
504
- To draft a first taxonomy from an existing codebase, use the `tcw-setup` skill
504
+ To draft a first taxonomy from an existing codebase, use the `setup` skill
505
505
  described in [Skills and Agents](#skills-and-agents).
506
506
 
507
507
  #### CLI
@@ -513,7 +513,7 @@ described in [Skills and Agents](#skills-and-agents).
513
513
  | `tcw taxonomy add` | creates a vocabulary entry or a feature |
514
514
  | `tcw taxonomy show` | prints one entry |
515
515
  | `tcw taxonomy path` | prints the folder the taxonomy is stored in |
516
- | `tcw taxonomy rm` | removes a local entry |
516
+ | `tcw taxonomy rm` | removes a local entry nothing is nested under or refers to |
517
517
  | `tcw taxonomy search` | searches entry names and descriptions |
518
518
  | `tcw taxonomy check` | checks that every reference and inherited project resolves |
519
519
  | `tcw taxonomy extends` | adds or removes a project whose taxonomy this one inherits |
@@ -558,9 +558,9 @@ registered in the taxonomy before a capability names it.
558
558
 
559
559
  #### Skills
560
560
 
561
- | Skill | What it does |
562
- | ------------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
563
- | [`tcw-capabilities`](skills/tcw-capabilities/SKILL.md) | Guides an agent through checking a planned change against the existing capabilities, catching contradictions, and updating a capability's status when work completes. |
561
+ | Skill | What it does |
562
+ | ---------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
563
+ | [`capabilities`](skills/capabilities/SKILL.md) | Guides an agent through checking a planned change against the existing capabilities, catching contradictions, and updating a capability's status when work completes. |
564
564
 
565
565
  #### CLI
566
566
 
@@ -695,7 +695,7 @@ The transitions, and what each one checks before it moves an item:
695
695
  | `start` | `tcw work start <slug>` | backlog → active | a blocker is unresolved; the item belongs to an epic that is not active |
696
696
  | `submit` | `tcw work submit <slug>` | active → review | never |
697
697
  | `rework` | `tcw work rework <slug>` | review → active | `refined-outcome.md` is present (it says the work was accepted) |
698
- | `complete` | `tcw work complete <slug> --resolution done --confirm` | review or active → completed | a blocker is unresolved; an epic has open children; declared capabilities are not reconciled; a worktree merge-back fails; no `--confirm` |
698
+ | `complete` | `tcw work complete <slug> --resolution done --confirm` | review or active → completed | a blocker is unresolved; an epic has open children; declared capabilities are not reconciled; a worktree merge-back fails; the item's folder in its worktree has uncommitted changes; no `--confirm` |
699
699
  | discard | `tcw work complete <slug> --resolution wontfix\|duplicate\|superseded --confirm` | backlog, active or review → discarded | no `--confirm` |
700
700
  | `drop` | `tcw work drop <slug> --confirm` | backlog → removed | the item is not in backlog; no `--confirm` |
701
701
  | not retained | happens during `complete` or discard | completed or discarded → removed | only happens when `work.retain` says that status is not kept; `tcw work delete` finishes one that was interrupted |
@@ -709,6 +709,11 @@ such as a design rule read at `spec` or `tcw validate` run before `complete`. Se
709
709
  [Configuration](docs/guide/configuration.md). `tcw work lifecycle` prints the
710
710
  whole contract, with whatever the project has attached.
711
711
 
712
+ Some of TCW's other instructions can be replaced the same way: how to work items
713
+ unattended, triage issues, keep documentation in sync, and seven more.
714
+ `tcw work procedure prompt <id>` prints one of them, and a project replaces or
715
+ adds to its text under `work.procedures` in `tcw-config.yaml`.
716
+
712
717
  #### Jira integration
713
718
 
714
719
  A project can name the Jira Cloud site its team works from. Tickets can then
@@ -718,18 +723,21 @@ to the transitions.
718
723
 
719
724
  | Lifecycle step | Without Jira | With Jira configured |
720
725
  | --------------------------------------- | ------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------- |
721
- | an item is created | `tcw work inbox accept`, `new` | `tcw work tracker import <ticket>` claims the ticket (starts it and assigns it to you), then creates a backlog item whose intake is the ticket |
726
+ | an item is created | `tcw work inbox accept`, `new` | `tcw work tracker import <ticket>` claims the ticket (starts it and assigns it to you), then creates a backlog item whose intake is the ticket. With `inbox-query` set, `tcw work inbox accept <ticket>` does the same |
722
727
  | `request`, `spec`, `plan` stages | unchanged | unchanged |
723
728
  | at any time | — | `tcw work tracker link` / `unlink` records or removes the link between an existing item and a ticket; Jira itself is not touched |
724
729
  | `start` | moves the item | also claims a linked ticket, and posts a comment if `comments: true` |
725
730
  | `submit`, `rework`, `complete`, discard | moves the item | also moves a linked ticket to the Jira status mapped under `statuses`, and posts a comment if `comments: true` |
726
731
  | the ticket could not follow | — | the item still moves; the command exits 1 and records the ticket as pending or conflicting; `tcw work tracker sync` retries |
732
+ | the ticket is behind its item | — | with `tcw work tracker link --sync-status`, a ticket linked to work already under way is claimed and moved forward to where the item is |
733
+ | the ticket does not match its item | — | `tcw work tracker sync <slug>` puts it where the item's status says, whether the ticket is ahead of the item or behind it; a backwards move says so |
727
734
 
728
735
  Setting `strict: true` changes several steps, so that no work happens without a
729
736
  claimed ticket:
730
737
 
731
- - `tcw work new` (except `--epic`) and `inbox accept` are refused, and point you at
732
- `tcw work tracker import`.
738
+ - `tcw work new` (except `--epic`) and `inbox accept` of an inbox entry are refused,
739
+ and point you at `tcw work tracker import`. Where `inbox-query` is set, `inbox accept`
740
+ of a ticket is allowed, because it claims the ticket.
733
741
  - `start` refuses an item with no ticket. For a linked item it claims the ticket
734
742
  first, and moves the item only if the claim worked.
735
743
  - `submit`, `rework` and `complete --resolution done` read the ticket first, and
@@ -750,10 +758,20 @@ work:
750
758
  credentials:
751
759
  email-env: TCW_JIRA_EMAIL
752
760
  token-env: TCW_JIRA_API_TOKEN
753
- transitions: { claim: Start Progress }
761
+ transitions: { start: Start Progress }
754
762
  statuses: { active: In Progress, review: In Review, completed: Done }
763
+ inbox-query: project = ENG AND status = Triage # optional
755
764
  ```
756
765
 
766
+ `candidate-query` selects the tickets ready for you to take, and `tcw work tracker
767
+ list` shows them. The optional `inbox-query` selects the tickets still waiting to be
768
+ triaged. When it is set, `tcw work inbox list` prints two sections, `raw intake:` and
769
+ `tracker tickets:`, so triage works from one list. `tcw work inbox show` and
770
+ `inbox accept` then take a ticket key as well as an inbox entry: an inbox entry with
771
+ the same name wins, and `--ticket` reads the name as a ticket anyway. Accepting a
772
+ ticket claims it, exactly as `tcw work tracker import` does. Write the query so it
773
+ leaves out tickets that already have a work item; TCW does not filter them.
774
+
757
775
  The credentials entries hold the **names** of environment variables, never the
758
776
  e-mail address or token themselves.
759
777
 
@@ -777,7 +795,19 @@ tcw work tracker link <slug> ENG-517 # TCW: records the link.
777
795
  tcw work start <slug> # TCW: backlog → active. Jira: if unassigned or yours, ENG-517 → In Progress, assigned to you
778
796
  ```
779
797
 
780
- **Example 3: the same project with `strict: true`.**
798
+ **Example 3: taking a ticket without starting it, and handing it back.**
799
+
800
+ ```sh
801
+ tcw work tracker claim <slug> # TCW: records you as the owner. Jira: ENG-517 assigned to you; status unchanged
802
+ # …you decide it is not yours after all…
803
+ tcw work tracker release <slug> # TCW: clears the owner. Jira: ENG-517 unassigned; status unchanged
804
+ ```
805
+
806
+ Neither command moves anything. Claiming an item already under way is how you
807
+ take work over; releasing one is how you hand it on, and it stays where it is
808
+ until somebody else claims it.
809
+
810
+ **Example 4: the same project with `strict: true`.**
781
811
 
782
812
  ```sh
783
813
  tcw work new "Speed up the checkout page"
@@ -795,11 +825,11 @@ reports, comments, and the known limits are in
795
825
 
796
826
  #### Skills
797
827
 
798
- | Skill | What it does |
799
- | ---------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
800
- | [`tcw-work`](skills/tcw-work/SKILL.md) | Guides an agent through the whole work lifecycle: triaging the inbox, writing the request, spec and plan, implementing, verifying, completing, splitting large items, and coordinating epics. |
801
- | [`tcw-post-mortem`](skills/tcw-post-mortem/SKILL.md) | Once a problem has surfaced (rejected work, a false claim in a spec, something shipped that should not have), finds which lifecycle stage could first have caught it. |
802
- | [`tcw-work-create`](skills/tcw-work-create/SKILL.md) | Turns an idea for a piece of work into a work item, or adds it to the item or inbox entry that already covers it, after checking what is already tracked. |
828
+ | Skill | What it does |
829
+ | -------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
830
+ | [`work`](skills/work/SKILL.md) | Guides an agent through the whole work lifecycle: triaging the inbox, writing the request, spec and plan, implementing, verifying, completing, splitting large items, and coordinating epics. |
831
+ | [`post-mortem`](skills/post-mortem/SKILL.md) | Once a problem has surfaced (rejected work, a false claim in a spec, something shipped that should not have), finds which lifecycle stage could first have caught it. |
832
+ | [`work-create`](skills/work-create/SKILL.md) | Turns an idea for a piece of work into a work item, or adds it to the item or inbox entry that already covers it, after checking what is already tracked. |
803
833
 
804
834
  Most day-to-day work starts from one of the command skills (planning an item,
805
835
  driving it to completion, verifying it, processing the inbox) described in
@@ -815,7 +845,7 @@ driving it to completion, verifying it, processing the inbox) described in
815
845
  | `tcw work list` | shows the board; completed and discarded items only when asked |
816
846
  | `tcw work show` | prints an item's status, fields and documents |
817
847
  | `tcw work path` | prints the work store's folder, or an item's folder |
818
- | `tcw work edit` | changes an item's title, estimates, tags or blockers |
848
+ | `tcw work edit` | changes an item's title, estimates, tags, blockers or type |
819
849
  | `tcw work tags` | lists, adds or removes the project's registered tags |
820
850
 
821
851
  **Transitions**
@@ -831,18 +861,19 @@ driving it to completion, verifying it, processing the inbox) described in
831
861
 
832
862
  **Lifecycle stages**
833
863
 
834
- | Command | What it does |
835
- | -------------------- | ----------------------------------------------------------------------------------------- |
836
- | `tcw work lifecycle` | prints every stage and transition, with what this project attaches to each |
837
- | `tcw work stage` | `stage gate` checks a stage may run; `stage prompt` prints its instructions |
838
- | `tcw work scaffold` | writes a draft of a stage's document from its template |
839
- | `tcw work docs` | prints the project's documentation entries: which documents a change must keep up to date |
864
+ | Command | What it does |
865
+ | -------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------ |
866
+ | `tcw work lifecycle` | prints every stage and transition, with what this project attaches to each |
867
+ | `tcw work stage` | `stage gate` checks a stage may run; `stage prompt` prints its instructions; `stage validate` checks the arguments given to the `work-stage` skill |
868
+ | `tcw work procedure` | `procedure prompt` prints one of TCW's procedures, such as `unattended-work` or `search`, with this project's own text for it |
869
+ | `tcw work scaffold` | writes a draft of a stage's document from its template |
870
+ | `tcw work docs` | prints the project's documentation entries: which documents a change must keep up to date |
840
871
 
841
872
  **Inbox, and work across projects**
842
873
 
843
874
  | Command | What it does |
844
875
  | -------------------- | ----------------------------------------------------------------- |
845
- | `tcw work inbox` | `inbox list`, `inbox show` and `inbox accept` raw requests |
876
+ | `tcw work inbox` | `inbox list`, `inbox show` and `inbox accept` raw requests, and Jira tickets awaiting triage |
846
877
  | `tcw work nodes` | lists this project's parent and child projects |
847
878
  | `tcw work delegate` | writes a request into a child project's inbox |
848
879
  | `tcw work escalate` | writes a request into the parent project's inbox |
@@ -852,7 +883,7 @@ driving it to completion, verifying it, processing the inbox) described in
852
883
 
853
884
  | Command | What it does |
854
885
  | -------------------- | ------------------------------------------------------------------------------------------------------------- |
855
- | `tcw work tracker` | `list`, `show`, `import`, `link`, `unlink` and `sync` against Jira; see [Jira integration](#jira-integration) |
886
+ | `tcw work tracker` | `list`, `show`, `import`, `claim`, `release`, `link`, `unlink` and `sync` against Jira; see [Jira integration](#jira-integration) |
856
887
  | `tcw work init` | creates the work store's folders (the same as `tcw init work`) |
857
888
  | `tcw work tombstone` | records items resolved before the store kept a record of them, so their slugs are never reused |
858
889
 
@@ -882,36 +913,37 @@ across the axes.
882
913
 
883
914
  | Skill | What it does |
884
915
  | ---------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
885
- | [`tcw-setup`](skills/tcw-setup/SKILL.md) | Gets TCW working: installs or repairs the CLI, starts using TCW in a repository, sets up a project on a new machine, and drafts a first taxonomy or capabilities list from existing code. |
886
- | [`tcw-configure`](skills/tcw-configure/SKILL.md) | Changes a working project's configuration: what runs at each stage or transition, the Definition of Done, documentation entries, Jira, where stores live, connected and inherited projects. |
887
- | [`documentation-sync`](skills/documentation-sync/SKILL.md) | Decides which documents a finished change must update (README, changelogs, release notes, guides, skills), and offers a version bump when work is done. |
888
- | [`tcw-work-stage`](skills/tcw-work-stage/SKILL.md) | Reads one lifecycle stage in a single step: the stage's own instructions together with whatever this project adds to them. |
916
+ | [`setup`](skills/setup/SKILL.md) | Gets TCW working: installs or repairs the CLI, starts using TCW in a repository, sets up a project on a new machine, and drafts a first taxonomy or capabilities list from existing code. |
917
+ | [`configure`](skills/configure/SKILL.md) | Changes a working project's configuration: what runs at each stage or transition, the Definition of Done, documentation entries, Jira, where stores live, connected and inherited projects. |
918
+ | [`documentation-sync`](skills/documentation-sync/SKILL.md) | Decides which documents a finished change must update (README, changelogs, release notes, guides, skills), and runs the version cut when you ask for one. |
919
+ | [`work-stage`](skills/work-stage/SKILL.md) | Reads one lifecycle stage in a single step: the stage's own instructions together with whatever this project adds to them. |
889
920
 
890
921
  **Command skills: the everyday workflows**
891
922
 
892
- | Skill | What it does |
893
- | ------------------------------------------------------------------------------------------------ | --------------------------------------------------------------------------------------------------------------- |
894
- | [`tcw-commands-process-inbox`](skills/tcw-commands-process-inbox/SKILL.md) | Turns raw inbox entries into work items and writes each one's request. |
895
- | [`tcw-commands-plan-work`](skills/tcw-commands-plan-work/SKILL.md) | Takes an item, or a request made in chat, through the request, spec and plan stages, and stops before any code. |
896
- | [`tcw-commands-drive-work-to-completion`](skills/tcw-commands-drive-work-to-completion/SKILL.md) | Takes an item from wherever it is through implementation, and stops for your verification before completing it. |
897
- | [`tcw-commands-verify-work`](skills/tcw-commands-verify-work/SKILL.md) | Checks finished work against its spec with you, and records whether it was accepted or needs rework. |
923
+ | Skill | What it does |
924
+ | ---------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------- |
925
+ | [`commands-process-inbox`](skills/commands-process-inbox/SKILL.md) | Turns raw inbox entries into work items and writes each one's request. |
926
+ | [`commands-plan-work`](skills/commands-plan-work/SKILL.md) | Takes an item, or a request made in chat, through the request, spec and plan stages, and stops before any code. |
927
+ | [`commands-drive-work-to-completion`](skills/commands-drive-work-to-completion/SKILL.md) | Takes an item from wherever it is through implementation, and stops for your verification before completing it. |
928
+ | [`commands-verify-work`](skills/commands-verify-work/SKILL.md) | Checks finished work against its spec with you, and records whether it was accepted or needs rework. |
929
+ | [`commands-pause-work`](skills/commands-pause-work/SKILL.md) | Stops the work in hand, writes down what resuming needs in the item, and waits for you to say carry on. |
898
930
 
899
931
  **Extras: optional, built for one way of working**
900
932
 
901
933
  | Skill | What it does |
902
934
  | -------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------- |
903
- | [`tcw-extras-autonomous-work`](skills/tcw-extras-autonomous-work/SKILL.md) | Drives work items to completion unattended, asking two read-only advisors wherever the lifecycle would ask you. |
904
- | [`tcw-extras-triage-issues`](skills/tcw-extras-triage-issues/SKILL.md) | Works through **your** project's GitHub issues and turns the ones worth doing into work items. |
905
- | [`tcw-extras-report`](skills/tcw-extras-report/SKILL.md) | Files a bug report or suggestion about TCW itself on [this project's issues](https://github.com/brocef/TCW/issues). |
935
+ | [`extras-autonomous-work`](skills/extras-autonomous-work/SKILL.md) | Drives work items to completion unattended, asking read-only advisors wherever the lifecycle would ask you — by default Codex and an Opus subagent, replaceable by your project. |
936
+ | [`extras-triage-issues`](skills/extras-triage-issues/SKILL.md) | Works through **your** project's GitHub issues and turns the ones worth doing into work items. |
937
+ | [`extras-report`](skills/extras-report/SKILL.md) | Files a bug report or suggestion about TCW itself on [this project's issues](https://github.com/brocef/TCW/issues). |
906
938
 
907
939
  **Agents.** Three read-only agents ship with the plugin. None of them edits a
908
940
  file or moves an item; each reports back to the session that started it.
909
941
 
910
942
  | Agent | What it does |
911
943
  | --------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------ |
912
- | `tcw-verifier` | For the `verify` stage: reads the change against the item's spec, runs checks, and reports whether each acceptance criterion is met. |
913
- | `tcw-backlog-auditor` | Checks one backlog item for problems: already done, out of date, in the wrong project, not actionable, or blocked by something already resolved. |
914
- | `tcw-post-mortem` | Reads an item's documents and commit history backwards to find which stage could first have caught a problem. |
944
+ | `verifier` | For the `verify` stage: reads the change against the item's spec, runs checks, and reports whether each acceptance criterion is met. |
945
+ | `backlog-auditor` | Checks one backlog item against your project's backlog-audit procedure. By default: already done, out of date, in the wrong project, not actionable, or blocked by something already resolved. |
946
+ | `post-mortem` | Reads an item's documents and commit history backwards to find which stage could first have caught a problem. |
915
947
 
916
948
  ## TCW Local Web App
917
949
 
@@ -1046,7 +1078,7 @@ PyPI. Details, including the one-time PyPI setup, are in
1046
1078
 
1047
1079
  File bugs and suggestions on
1048
1080
  [GitHub issues](https://github.com/brocef/TCW/issues). With the plugin installed,
1049
- the `tcw-extras-report` skill gives you a ready-to-fill template.
1081
+ the `extras-report` skill gives you a ready-to-fill template.
1050
1082
 
1051
1083
  ### License
1052
1084
 
@@ -76,7 +76,7 @@ by installing `tcw-cli` from PyPI with `pipx`, so one installed mid-session
76
76
  cannot run until the next one begins. That first session needs network access. It
77
77
  installs over an existing `pipx install tcw-cli` rather than beside it, and
78
78
  leaves a development checkout (`pip install -e .`) alone. If `tcw` goes missing
79
- anyway, `pipx install tcw-cli` is the whole fix — the **`tcw-setup`** skill
79
+ anyway, `pipx install tcw-cli` is the whole fix — the **`setup`** skill
80
80
  carries the cases where it is not.
81
81
 
82
82
  In **Codex**:
@@ -86,7 +86,7 @@ codex plugin marketplace add brocef/TCW --ref main
86
86
  codex plugin add tcw@tcw
87
87
  ```
88
88
 
89
- Codex has no session-start hook, so ask the agent to run the **`tcw-setup`**
89
+ Codex has no session-start hook, so ask the agent to run the **`setup`**
90
90
  skill — it runs the same install script Claude runs automatically.
91
91
 
92
92
  The plugin ships the skills and read-only review agents described in
@@ -281,11 +281,11 @@ becomes your own `permission`.
281
281
 
282
282
  #### Skills
283
283
 
284
- | Skill | What it does |
285
- | ---------------------------------------------- | --------------------------------------------------------------------------------------------------------- |
286
- | [`tcw-taxonomy`](skills/tcw-taxonomy/SKILL.md) | Guides an agent through declaring vocabulary and features, linking them, and resolving inherited entries. |
284
+ | Skill | What it does |
285
+ | -------------------------------------- | --------------------------------------------------------------------------------------------------------- |
286
+ | [`taxonomy`](skills/taxonomy/SKILL.md) | Guides an agent through declaring vocabulary and features, linking them, and resolving inherited entries. |
287
287
 
288
- To draft a first taxonomy from an existing codebase, use the `tcw-setup` skill
288
+ To draft a first taxonomy from an existing codebase, use the `setup` skill
289
289
  described in [Skills and Agents](#skills-and-agents).
290
290
 
291
291
  #### CLI
@@ -297,7 +297,7 @@ described in [Skills and Agents](#skills-and-agents).
297
297
  | `tcw taxonomy add` | creates a vocabulary entry or a feature |
298
298
  | `tcw taxonomy show` | prints one entry |
299
299
  | `tcw taxonomy path` | prints the folder the taxonomy is stored in |
300
- | `tcw taxonomy rm` | removes a local entry |
300
+ | `tcw taxonomy rm` | removes a local entry nothing is nested under or refers to |
301
301
  | `tcw taxonomy search` | searches entry names and descriptions |
302
302
  | `tcw taxonomy check` | checks that every reference and inherited project resolves |
303
303
  | `tcw taxonomy extends` | adds or removes a project whose taxonomy this one inherits |
@@ -342,9 +342,9 @@ registered in the taxonomy before a capability names it.
342
342
 
343
343
  #### Skills
344
344
 
345
- | Skill | What it does |
346
- | ------------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
347
- | [`tcw-capabilities`](skills/tcw-capabilities/SKILL.md) | Guides an agent through checking a planned change against the existing capabilities, catching contradictions, and updating a capability's status when work completes. |
345
+ | Skill | What it does |
346
+ | ---------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
347
+ | [`capabilities`](skills/capabilities/SKILL.md) | Guides an agent through checking a planned change against the existing capabilities, catching contradictions, and updating a capability's status when work completes. |
348
348
 
349
349
  #### CLI
350
350
 
@@ -479,7 +479,7 @@ The transitions, and what each one checks before it moves an item:
479
479
  | `start` | `tcw work start <slug>` | backlog → active | a blocker is unresolved; the item belongs to an epic that is not active |
480
480
  | `submit` | `tcw work submit <slug>` | active → review | never |
481
481
  | `rework` | `tcw work rework <slug>` | review → active | `refined-outcome.md` is present (it says the work was accepted) |
482
- | `complete` | `tcw work complete <slug> --resolution done --confirm` | review or active → completed | a blocker is unresolved; an epic has open children; declared capabilities are not reconciled; a worktree merge-back fails; no `--confirm` |
482
+ | `complete` | `tcw work complete <slug> --resolution done --confirm` | review or active → completed | a blocker is unresolved; an epic has open children; declared capabilities are not reconciled; a worktree merge-back fails; the item's folder in its worktree has uncommitted changes; no `--confirm` |
483
483
  | discard | `tcw work complete <slug> --resolution wontfix\|duplicate\|superseded --confirm` | backlog, active or review → discarded | no `--confirm` |
484
484
  | `drop` | `tcw work drop <slug> --confirm` | backlog → removed | the item is not in backlog; no `--confirm` |
485
485
  | not retained | happens during `complete` or discard | completed or discarded → removed | only happens when `work.retain` says that status is not kept; `tcw work delete` finishes one that was interrupted |
@@ -493,6 +493,11 @@ such as a design rule read at `spec` or `tcw validate` run before `complete`. Se
493
493
  [Configuration](docs/guide/configuration.md). `tcw work lifecycle` prints the
494
494
  whole contract, with whatever the project has attached.
495
495
 
496
+ Some of TCW's other instructions can be replaced the same way: how to work items
497
+ unattended, triage issues, keep documentation in sync, and seven more.
498
+ `tcw work procedure prompt <id>` prints one of them, and a project replaces or
499
+ adds to its text under `work.procedures` in `tcw-config.yaml`.
500
+
496
501
  #### Jira integration
497
502
 
498
503
  A project can name the Jira Cloud site its team works from. Tickets can then
@@ -502,18 +507,21 @@ to the transitions.
502
507
 
503
508
  | Lifecycle step | Without Jira | With Jira configured |
504
509
  | --------------------------------------- | ------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------- |
505
- | an item is created | `tcw work inbox accept`, `new` | `tcw work tracker import <ticket>` claims the ticket (starts it and assigns it to you), then creates a backlog item whose intake is the ticket |
510
+ | an item is created | `tcw work inbox accept`, `new` | `tcw work tracker import <ticket>` claims the ticket (starts it and assigns it to you), then creates a backlog item whose intake is the ticket. With `inbox-query` set, `tcw work inbox accept <ticket>` does the same |
506
511
  | `request`, `spec`, `plan` stages | unchanged | unchanged |
507
512
  | at any time | — | `tcw work tracker link` / `unlink` records or removes the link between an existing item and a ticket; Jira itself is not touched |
508
513
  | `start` | moves the item | also claims a linked ticket, and posts a comment if `comments: true` |
509
514
  | `submit`, `rework`, `complete`, discard | moves the item | also moves a linked ticket to the Jira status mapped under `statuses`, and posts a comment if `comments: true` |
510
515
  | the ticket could not follow | — | the item still moves; the command exits 1 and records the ticket as pending or conflicting; `tcw work tracker sync` retries |
516
+ | the ticket is behind its item | — | with `tcw work tracker link --sync-status`, a ticket linked to work already under way is claimed and moved forward to where the item is |
517
+ | the ticket does not match its item | — | `tcw work tracker sync <slug>` puts it where the item's status says, whether the ticket is ahead of the item or behind it; a backwards move says so |
511
518
 
512
519
  Setting `strict: true` changes several steps, so that no work happens without a
513
520
  claimed ticket:
514
521
 
515
- - `tcw work new` (except `--epic`) and `inbox accept` are refused, and point you at
516
- `tcw work tracker import`.
522
+ - `tcw work new` (except `--epic`) and `inbox accept` of an inbox entry are refused,
523
+ and point you at `tcw work tracker import`. Where `inbox-query` is set, `inbox accept`
524
+ of a ticket is allowed, because it claims the ticket.
517
525
  - `start` refuses an item with no ticket. For a linked item it claims the ticket
518
526
  first, and moves the item only if the claim worked.
519
527
  - `submit`, `rework` and `complete --resolution done` read the ticket first, and
@@ -534,10 +542,20 @@ work:
534
542
  credentials:
535
543
  email-env: TCW_JIRA_EMAIL
536
544
  token-env: TCW_JIRA_API_TOKEN
537
- transitions: { claim: Start Progress }
545
+ transitions: { start: Start Progress }
538
546
  statuses: { active: In Progress, review: In Review, completed: Done }
547
+ inbox-query: project = ENG AND status = Triage # optional
539
548
  ```
540
549
 
550
+ `candidate-query` selects the tickets ready for you to take, and `tcw work tracker
551
+ list` shows them. The optional `inbox-query` selects the tickets still waiting to be
552
+ triaged. When it is set, `tcw work inbox list` prints two sections, `raw intake:` and
553
+ `tracker tickets:`, so triage works from one list. `tcw work inbox show` and
554
+ `inbox accept` then take a ticket key as well as an inbox entry: an inbox entry with
555
+ the same name wins, and `--ticket` reads the name as a ticket anyway. Accepting a
556
+ ticket claims it, exactly as `tcw work tracker import` does. Write the query so it
557
+ leaves out tickets that already have a work item; TCW does not filter them.
558
+
541
559
  The credentials entries hold the **names** of environment variables, never the
542
560
  e-mail address or token themselves.
543
561
 
@@ -561,7 +579,19 @@ tcw work tracker link <slug> ENG-517 # TCW: records the link.
561
579
  tcw work start <slug> # TCW: backlog → active. Jira: if unassigned or yours, ENG-517 → In Progress, assigned to you
562
580
  ```
563
581
 
564
- **Example 3: the same project with `strict: true`.**
582
+ **Example 3: taking a ticket without starting it, and handing it back.**
583
+
584
+ ```sh
585
+ tcw work tracker claim <slug> # TCW: records you as the owner. Jira: ENG-517 assigned to you; status unchanged
586
+ # …you decide it is not yours after all…
587
+ tcw work tracker release <slug> # TCW: clears the owner. Jira: ENG-517 unassigned; status unchanged
588
+ ```
589
+
590
+ Neither command moves anything. Claiming an item already under way is how you
591
+ take work over; releasing one is how you hand it on, and it stays where it is
592
+ until somebody else claims it.
593
+
594
+ **Example 4: the same project with `strict: true`.**
565
595
 
566
596
  ```sh
567
597
  tcw work new "Speed up the checkout page"
@@ -579,11 +609,11 @@ reports, comments, and the known limits are in
579
609
 
580
610
  #### Skills
581
611
 
582
- | Skill | What it does |
583
- | ---------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
584
- | [`tcw-work`](skills/tcw-work/SKILL.md) | Guides an agent through the whole work lifecycle: triaging the inbox, writing the request, spec and plan, implementing, verifying, completing, splitting large items, and coordinating epics. |
585
- | [`tcw-post-mortem`](skills/tcw-post-mortem/SKILL.md) | Once a problem has surfaced (rejected work, a false claim in a spec, something shipped that should not have), finds which lifecycle stage could first have caught it. |
586
- | [`tcw-work-create`](skills/tcw-work-create/SKILL.md) | Turns an idea for a piece of work into a work item, or adds it to the item or inbox entry that already covers it, after checking what is already tracked. |
612
+ | Skill | What it does |
613
+ | -------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
614
+ | [`work`](skills/work/SKILL.md) | Guides an agent through the whole work lifecycle: triaging the inbox, writing the request, spec and plan, implementing, verifying, completing, splitting large items, and coordinating epics. |
615
+ | [`post-mortem`](skills/post-mortem/SKILL.md) | Once a problem has surfaced (rejected work, a false claim in a spec, something shipped that should not have), finds which lifecycle stage could first have caught it. |
616
+ | [`work-create`](skills/work-create/SKILL.md) | Turns an idea for a piece of work into a work item, or adds it to the item or inbox entry that already covers it, after checking what is already tracked. |
587
617
 
588
618
  Most day-to-day work starts from one of the command skills (planning an item,
589
619
  driving it to completion, verifying it, processing the inbox) described in
@@ -599,7 +629,7 @@ driving it to completion, verifying it, processing the inbox) described in
599
629
  | `tcw work list` | shows the board; completed and discarded items only when asked |
600
630
  | `tcw work show` | prints an item's status, fields and documents |
601
631
  | `tcw work path` | prints the work store's folder, or an item's folder |
602
- | `tcw work edit` | changes an item's title, estimates, tags or blockers |
632
+ | `tcw work edit` | changes an item's title, estimates, tags, blockers or type |
603
633
  | `tcw work tags` | lists, adds or removes the project's registered tags |
604
634
 
605
635
  **Transitions**
@@ -615,18 +645,19 @@ driving it to completion, verifying it, processing the inbox) described in
615
645
 
616
646
  **Lifecycle stages**
617
647
 
618
- | Command | What it does |
619
- | -------------------- | ----------------------------------------------------------------------------------------- |
620
- | `tcw work lifecycle` | prints every stage and transition, with what this project attaches to each |
621
- | `tcw work stage` | `stage gate` checks a stage may run; `stage prompt` prints its instructions |
622
- | `tcw work scaffold` | writes a draft of a stage's document from its template |
623
- | `tcw work docs` | prints the project's documentation entries: which documents a change must keep up to date |
648
+ | Command | What it does |
649
+ | -------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------ |
650
+ | `tcw work lifecycle` | prints every stage and transition, with what this project attaches to each |
651
+ | `tcw work stage` | `stage gate` checks a stage may run; `stage prompt` prints its instructions; `stage validate` checks the arguments given to the `work-stage` skill |
652
+ | `tcw work procedure` | `procedure prompt` prints one of TCW's procedures, such as `unattended-work` or `search`, with this project's own text for it |
653
+ | `tcw work scaffold` | writes a draft of a stage's document from its template |
654
+ | `tcw work docs` | prints the project's documentation entries: which documents a change must keep up to date |
624
655
 
625
656
  **Inbox, and work across projects**
626
657
 
627
658
  | Command | What it does |
628
659
  | -------------------- | ----------------------------------------------------------------- |
629
- | `tcw work inbox` | `inbox list`, `inbox show` and `inbox accept` raw requests |
660
+ | `tcw work inbox` | `inbox list`, `inbox show` and `inbox accept` raw requests, and Jira tickets awaiting triage |
630
661
  | `tcw work nodes` | lists this project's parent and child projects |
631
662
  | `tcw work delegate` | writes a request into a child project's inbox |
632
663
  | `tcw work escalate` | writes a request into the parent project's inbox |
@@ -636,7 +667,7 @@ driving it to completion, verifying it, processing the inbox) described in
636
667
 
637
668
  | Command | What it does |
638
669
  | -------------------- | ------------------------------------------------------------------------------------------------------------- |
639
- | `tcw work tracker` | `list`, `show`, `import`, `link`, `unlink` and `sync` against Jira; see [Jira integration](#jira-integration) |
670
+ | `tcw work tracker` | `list`, `show`, `import`, `claim`, `release`, `link`, `unlink` and `sync` against Jira; see [Jira integration](#jira-integration) |
640
671
  | `tcw work init` | creates the work store's folders (the same as `tcw init work`) |
641
672
  | `tcw work tombstone` | records items resolved before the store kept a record of them, so their slugs are never reused |
642
673
 
@@ -666,36 +697,37 @@ across the axes.
666
697
 
667
698
  | Skill | What it does |
668
699
  | ---------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
669
- | [`tcw-setup`](skills/tcw-setup/SKILL.md) | Gets TCW working: installs or repairs the CLI, starts using TCW in a repository, sets up a project on a new machine, and drafts a first taxonomy or capabilities list from existing code. |
670
- | [`tcw-configure`](skills/tcw-configure/SKILL.md) | Changes a working project's configuration: what runs at each stage or transition, the Definition of Done, documentation entries, Jira, where stores live, connected and inherited projects. |
671
- | [`documentation-sync`](skills/documentation-sync/SKILL.md) | Decides which documents a finished change must update (README, changelogs, release notes, guides, skills), and offers a version bump when work is done. |
672
- | [`tcw-work-stage`](skills/tcw-work-stage/SKILL.md) | Reads one lifecycle stage in a single step: the stage's own instructions together with whatever this project adds to them. |
700
+ | [`setup`](skills/setup/SKILL.md) | Gets TCW working: installs or repairs the CLI, starts using TCW in a repository, sets up a project on a new machine, and drafts a first taxonomy or capabilities list from existing code. |
701
+ | [`configure`](skills/configure/SKILL.md) | Changes a working project's configuration: what runs at each stage or transition, the Definition of Done, documentation entries, Jira, where stores live, connected and inherited projects. |
702
+ | [`documentation-sync`](skills/documentation-sync/SKILL.md) | Decides which documents a finished change must update (README, changelogs, release notes, guides, skills), and runs the version cut when you ask for one. |
703
+ | [`work-stage`](skills/work-stage/SKILL.md) | Reads one lifecycle stage in a single step: the stage's own instructions together with whatever this project adds to them. |
673
704
 
674
705
  **Command skills: the everyday workflows**
675
706
 
676
- | Skill | What it does |
677
- | ------------------------------------------------------------------------------------------------ | --------------------------------------------------------------------------------------------------------------- |
678
- | [`tcw-commands-process-inbox`](skills/tcw-commands-process-inbox/SKILL.md) | Turns raw inbox entries into work items and writes each one's request. |
679
- | [`tcw-commands-plan-work`](skills/tcw-commands-plan-work/SKILL.md) | Takes an item, or a request made in chat, through the request, spec and plan stages, and stops before any code. |
680
- | [`tcw-commands-drive-work-to-completion`](skills/tcw-commands-drive-work-to-completion/SKILL.md) | Takes an item from wherever it is through implementation, and stops for your verification before completing it. |
681
- | [`tcw-commands-verify-work`](skills/tcw-commands-verify-work/SKILL.md) | Checks finished work against its spec with you, and records whether it was accepted or needs rework. |
707
+ | Skill | What it does |
708
+ | ---------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------- |
709
+ | [`commands-process-inbox`](skills/commands-process-inbox/SKILL.md) | Turns raw inbox entries into work items and writes each one's request. |
710
+ | [`commands-plan-work`](skills/commands-plan-work/SKILL.md) | Takes an item, or a request made in chat, through the request, spec and plan stages, and stops before any code. |
711
+ | [`commands-drive-work-to-completion`](skills/commands-drive-work-to-completion/SKILL.md) | Takes an item from wherever it is through implementation, and stops for your verification before completing it. |
712
+ | [`commands-verify-work`](skills/commands-verify-work/SKILL.md) | Checks finished work against its spec with you, and records whether it was accepted or needs rework. |
713
+ | [`commands-pause-work`](skills/commands-pause-work/SKILL.md) | Stops the work in hand, writes down what resuming needs in the item, and waits for you to say carry on. |
682
714
 
683
715
  **Extras: optional, built for one way of working**
684
716
 
685
717
  | Skill | What it does |
686
718
  | -------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------- |
687
- | [`tcw-extras-autonomous-work`](skills/tcw-extras-autonomous-work/SKILL.md) | Drives work items to completion unattended, asking two read-only advisors wherever the lifecycle would ask you. |
688
- | [`tcw-extras-triage-issues`](skills/tcw-extras-triage-issues/SKILL.md) | Works through **your** project's GitHub issues and turns the ones worth doing into work items. |
689
- | [`tcw-extras-report`](skills/tcw-extras-report/SKILL.md) | Files a bug report or suggestion about TCW itself on [this project's issues](https://github.com/brocef/TCW/issues). |
719
+ | [`extras-autonomous-work`](skills/extras-autonomous-work/SKILL.md) | Drives work items to completion unattended, asking read-only advisors wherever the lifecycle would ask you — by default Codex and an Opus subagent, replaceable by your project. |
720
+ | [`extras-triage-issues`](skills/extras-triage-issues/SKILL.md) | Works through **your** project's GitHub issues and turns the ones worth doing into work items. |
721
+ | [`extras-report`](skills/extras-report/SKILL.md) | Files a bug report or suggestion about TCW itself on [this project's issues](https://github.com/brocef/TCW/issues). |
690
722
 
691
723
  **Agents.** Three read-only agents ship with the plugin. None of them edits a
692
724
  file or moves an item; each reports back to the session that started it.
693
725
 
694
726
  | Agent | What it does |
695
727
  | --------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------ |
696
- | `tcw-verifier` | For the `verify` stage: reads the change against the item's spec, runs checks, and reports whether each acceptance criterion is met. |
697
- | `tcw-backlog-auditor` | Checks one backlog item for problems: already done, out of date, in the wrong project, not actionable, or blocked by something already resolved. |
698
- | `tcw-post-mortem` | Reads an item's documents and commit history backwards to find which stage could first have caught a problem. |
728
+ | `verifier` | For the `verify` stage: reads the change against the item's spec, runs checks, and reports whether each acceptance criterion is met. |
729
+ | `backlog-auditor` | Checks one backlog item against your project's backlog-audit procedure. By default: already done, out of date, in the wrong project, not actionable, or blocked by something already resolved. |
730
+ | `post-mortem` | Reads an item's documents and commit history backwards to find which stage could first have caught a problem. |
699
731
 
700
732
  ## TCW Local Web App
701
733
 
@@ -830,7 +862,7 @@ PyPI. Details, including the one-time PyPI setup, are in
830
862
 
831
863
  File bugs and suggestions on
832
864
  [GitHub issues](https://github.com/brocef/TCW/issues). With the plugin installed,
833
- the `tcw-extras-report` skill gives you a ready-to-fill template.
865
+ the `extras-report` skill gives you a ready-to-fill template.
834
866
 
835
867
  ### License
836
868
 
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "tcw-cli"
7
- version = "2.3.0"
7
+ version = "2.4.0"
8
8
  description = "Taxonomy · Capabilities · Work — a storage-abstracted framework for describing and evolving a software project."
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.11"
@@ -31,7 +31,7 @@ include = ["tcw*"]
31
31
 
32
32
  [tool.setuptools.package-data]
33
33
  "tcw.serve" = ["dist/*", "dist/**/*"]
34
- "tcw.work" = ["prompts/*.md"]
34
+ "tcw.work" = ["prompts/*.md", "procedures/*.md"]
35
35
 
36
36
  [tool.pytest.ini_options]
37
37
  testpaths = ["tests"]
@@ -0,0 +1 @@
1
+ __version__ = "2.4.0"