formwork-kit 0.1.0__tar.gz → 0.2.1__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 (211) hide show
  1. {formwork_kit-0.1.0 → formwork_kit-0.2.1}/FORMWORK.md +44 -29
  2. formwork_kit-0.2.1/PKG-INFO +505 -0
  3. formwork_kit-0.2.1/README.md +476 -0
  4. {formwork_kit-0.1.0 → formwork_kit-0.2.1}/formwork/COSTS.md +15 -15
  5. {formwork_kit-0.1.0 → formwork_kit-0.2.1}/formwork/adapters/claude-code/README.md +2 -2
  6. {formwork_kit-0.1.0 → formwork_kit-0.2.1}/formwork/adapters/codex/README.md +2 -2
  7. {formwork_kit-0.1.0 → formwork_kit-0.2.1}/formwork/adapters/cursor/README.md +2 -2
  8. {formwork_kit-0.1.0 → formwork_kit-0.2.1}/formwork/adapters/gemini-cli/README.md +3 -3
  9. {formwork_kit-0.1.0 → formwork_kit-0.2.1}/formwork/build +9 -0
  10. formwork_kit-0.2.1/formwork/check/checks/standing-current +256 -0
  11. formwork_kit-0.2.1/formwork/check/checks/style-pointed +163 -0
  12. formwork_kit-0.2.1/formwork/check/checks/work-paired +203 -0
  13. formwork_kit-0.2.1/formwork/check/fixtures/standing-current/must-fail/a-decision-hides-in-a-subfolder/docs/decisions/2026/0002-second-page-size.md +6 -0
  14. formwork_kit-0.2.1/formwork/check/fixtures/standing-current/must-fail/a-decision-hides-in-a-subfolder/docs/standing.md +29 -0
  15. formwork_kit-0.2.1/formwork/check/fixtures/standing-current/must-fail/a-decision-is-newer-than-the-brief/docs/decisions/0002-second-page-size.md +11 -0
  16. formwork_kit-0.2.1/formwork/check/fixtures/standing-current/must-fail/a-decision-is-newer-than-the-brief/docs/standing.md +30 -0
  17. formwork_kit-0.2.1/formwork/check/fixtures/standing-current/must-fail/a-round-record-has-no-date/docs/rounds/page-size/record.md +10 -0
  18. formwork_kit-0.2.1/formwork/check/fixtures/standing-current/must-fail/a-round-record-has-no-date/docs/standing.md +29 -0
  19. formwork_kit-0.2.1/formwork/check/fixtures/standing-current/must-fail/the-brief-carries-no-date/docs/standing.md +25 -0
  20. formwork_kit-0.2.1/formwork/check/fixtures/standing-current/must-fail/the-brief-is-only-an-example/docs/standing.md +35 -0
  21. formwork_kit-0.2.1/formwork/check/fixtures/standing-current/must-fail/the-template-was-never-filled-in/docs/standing.md +24 -0
  22. formwork_kit-0.2.1/formwork/check/fixtures/standing-current/must-pass/a-quoted-diff-is-not-an-empty-bullet/docs/standing.md +37 -0
  23. formwork_kit-0.2.1/formwork/check/fixtures/standing-current/must-pass/filled-in-and-ahead-of-the-record/docs/decisions/0001-one-page-size.md +11 -0
  24. formwork_kit-0.2.1/formwork/check/fixtures/standing-current/must-pass/filled-in-and-ahead-of-the-record/docs/rounds/page-size/record.md +11 -0
  25. formwork_kit-0.2.1/formwork/check/fixtures/standing-current/must-pass/filled-in-and-ahead-of-the-record/docs/standing.md +30 -0
  26. formwork_kit-0.2.1/formwork/check/fixtures/standing-current/must-pass/filled-in-and-nothing-else-recorded/docs/standing.md +29 -0
  27. formwork_kit-0.2.1/formwork/check/fixtures/standing-current/must-pass/no-standing-brief-here/README.md +1 -0
  28. formwork_kit-0.2.1/formwork/check/fixtures/standing-current/must-pass/no-standing-brief-here/docs/notes.md +1 -0
  29. formwork_kit-0.2.1/formwork/check/fixtures/style-pointed/must-fail/a-role-in-a-subfolder/.claude/agents/team/writer.md +7 -0
  30. formwork_kit-0.2.1/formwork/check/fixtures/style-pointed/must-fail/a-role-in-a-subfolder/formwork/style.md +1 -0
  31. formwork_kit-0.2.1/formwork/check/fixtures/style-pointed/must-fail/a-word-that-merely-contains-it/.claude/agents/writer.md +8 -0
  32. formwork_kit-0.2.1/formwork/check/fixtures/style-pointed/must-fail/a-word-that-merely-contains-it/formwork/style.md +1 -0
  33. formwork_kit-0.2.1/formwork/check/fixtures/style-pointed/must-fail/one-runtime-was-left-behind/.claude/agents/writer.md +11 -0
  34. formwork_kit-0.2.1/formwork/check/fixtures/style-pointed/must-fail/one-runtime-was-left-behind/.gemini/agents/writer.md +11 -0
  35. formwork_kit-0.2.1/formwork/check/fixtures/style-pointed/must-fail/one-runtime-was-left-behind/formwork/style.md +1 -0
  36. formwork_kit-0.2.1/formwork/check/fixtures/style-pointed/must-fail/the-pointer-went-missing/.claude/agents/tester.md +11 -0
  37. formwork_kit-0.2.1/formwork/check/fixtures/style-pointed/must-fail/the-pointer-went-missing/.claude/agents/writer.md +11 -0
  38. formwork_kit-0.2.1/formwork/check/fixtures/style-pointed/must-fail/the-pointer-went-missing/formwork/style.md +1 -0
  39. formwork_kit-0.2.1/formwork/check/fixtures/style-pointed/must-pass/a-readme-among-the-roles/.claude/agents/README.md +1 -0
  40. formwork_kit-0.2.1/formwork/check/fixtures/style-pointed/must-pass/a-readme-among-the-roles/.claude/agents/writer.md +9 -0
  41. formwork_kit-0.2.1/formwork/check/fixtures/style-pointed/must-pass/a-readme-among-the-roles/formwork/style.md +1 -0
  42. formwork_kit-0.2.1/formwork/check/fixtures/style-pointed/must-pass/every-role-points-at-it/.claude/agents/tester.md +11 -0
  43. formwork_kit-0.2.1/formwork/check/fixtures/style-pointed/must-pass/every-role-points-at-it/.claude/agents/writer.md +11 -0
  44. formwork_kit-0.2.1/formwork/check/fixtures/style-pointed/must-pass/every-role-points-at-it/.codex/agents/writer.toml +7 -0
  45. formwork_kit-0.2.1/formwork/check/fixtures/style-pointed/must-pass/every-role-points-at-it/.gemini/agents/writer.md +11 -0
  46. formwork_kit-0.2.1/formwork/check/fixtures/style-pointed/must-pass/every-role-points-at-it/formwork/style.md +1 -0
  47. formwork_kit-0.2.1/formwork/check/fixtures/style-pointed/must-pass/no-style-page-here/.claude/agents/writer.md +11 -0
  48. formwork_kit-0.2.1/formwork/check/fixtures/style-pointed/must-pass/nothing-generated-yet/formwork/style.md +1 -0
  49. formwork_kit-0.2.1/formwork/check/fixtures/work-paired/must-fail/a-nested-status-hides-the-real-one/docs/briefs/0001-slow-login.md +8 -0
  50. formwork_kit-0.2.1/formwork/check/fixtures/work-paired/must-fail/a-report-for-nothing/docs/briefs/0001-slow-login.md +18 -0
  51. formwork_kit-0.2.1/formwork/check/fixtures/work-paired/must-fail/a-report-for-nothing/docs/reports/0001-slow-login.md +15 -0
  52. formwork_kit-0.2.1/formwork/check/fixtures/work-paired/must-fail/a-report-for-nothing/docs/reports/0009-a-brief-nobody-wrote.md +15 -0
  53. formwork_kit-0.2.1/formwork/check/fixtures/work-paired/must-fail/a-status-nobody-can-read/docs/briefs/0002-something.md +18 -0
  54. formwork_kit-0.2.1/formwork/check/fixtures/work-paired/must-fail/finished-and-left-no-report/docs/briefs/0001-slow-login.md +18 -0
  55. formwork_kit-0.2.1/formwork/check/fixtures/work-paired/must-fail/finished-and-left-no-report/docs/reports/README.md +1 -0
  56. formwork_kit-0.2.1/formwork/check/fixtures/work-paired/must-fail/the-report-is-empty/docs/briefs/0001-slow-login.md +10 -0
  57. formwork_kit-0.2.1/formwork/check/fixtures/work-paired/must-fail/the-report-is-empty/docs/reports/0001-slow-login.md +0 -0
  58. formwork_kit-0.2.1/formwork/check/fixtures/work-paired/must-fail/two-briefs-one-number/docs/briefs/0003-first-thing.md +18 -0
  59. formwork_kit-0.2.1/formwork/check/fixtures/work-paired/must-fail/two-briefs-one-number/docs/briefs/0003-second-thing.md +18 -0
  60. formwork_kit-0.2.1/formwork/check/fixtures/work-paired/must-fail/two-reports-one-number/docs/briefs/0001-slow-login.md +10 -0
  61. formwork_kit-0.2.1/formwork/check/fixtures/work-paired/must-fail/two-reports-one-number/docs/reports/0001-a-second-answer.md +3 -0
  62. formwork_kit-0.2.1/formwork/check/fixtures/work-paired/must-fail/two-reports-one-number/docs/reports/0001-slow-login.md +3 -0
  63. formwork_kit-0.2.1/formwork/check/fixtures/work-paired/must-pass/a-round-is-one-brief-like-any-other/docs/briefs/0001-storage-shape.md +9 -0
  64. formwork_kit-0.2.1/formwork/check/fixtures/work-paired/must-pass/a-round-is-one-brief-like-any-other/docs/reports/0001-storage-shape.md +7 -0
  65. formwork_kit-0.2.1/formwork/check/fixtures/work-paired/must-pass/a-round-is-one-brief-like-any-other/docs/rounds/storage-shape/predictions.md +5 -0
  66. formwork_kit-0.2.1/formwork/check/fixtures/work-paired/must-pass/a-round-is-one-brief-like-any-other/docs/rounds/storage-shape/round.md +11 -0
  67. formwork_kit-0.2.1/formwork/check/fixtures/work-paired/must-pass/finished-work-has-its-report/docs/briefs/0001-slow-login.md +18 -0
  68. formwork_kit-0.2.1/formwork/check/fixtures/work-paired/must-pass/finished-work-has-its-report/docs/briefs/0002-second-page-size.md +18 -0
  69. formwork_kit-0.2.1/formwork/check/fixtures/work-paired/must-pass/finished-work-has-its-report/docs/reports/0001-slow-login.md +15 -0
  70. formwork_kit-0.2.1/formwork/check/fixtures/work-paired/must-pass/no-briefs-folder/README.md +1 -0
  71. formwork_kit-0.2.1/formwork/check/fixtures/work-paired/must-pass/work-still-open-is-fine/docs/briefs/0001-slow-login.md +18 -0
  72. formwork_kit-0.2.1/formwork/check/fixtures/work-paired/must-pass/work-still-open-is-fine/docs/briefs/0002-printing.md +18 -0
  73. formwork_kit-0.2.1/formwork/check/fixtures/work-paired/must-pass/work-still-open-is-fine/docs/reports/0001-slow-login.md +15 -0
  74. {formwork_kit-0.1.0 → formwork_kit-0.2.1}/formwork/first-run.md +42 -22
  75. {formwork_kit-0.1.0 → formwork_kit-0.2.1}/formwork/fw +21 -2
  76. {formwork_kit-0.1.0 → formwork_kit-0.2.1}/formwork/glossary.md +26 -5
  77. {formwork_kit-0.1.0 → formwork_kit-0.2.1}/formwork/install +66 -1
  78. {formwork_kit-0.1.0 → formwork_kit-0.2.1}/formwork/limits.md +84 -1
  79. {formwork_kit-0.1.0 → formwork_kit-0.2.1}/formwork/loop.md +41 -6
  80. {formwork_kit-0.1.0 → formwork_kit-0.2.1}/formwork/roles/HOW-TO-ADD-A-ROLE.md +3 -3
  81. {formwork_kit-0.1.0 → formwork_kit-0.2.1}/formwork/roles/method/architect.md +12 -12
  82. {formwork_kit-0.1.0 → formwork_kit-0.2.1}/formwork/roles/method/challenger.md +8 -8
  83. formwork_kit-0.2.1/formwork/roles/method/director.md +244 -0
  84. {formwork_kit-0.1.0 → formwork_kit-0.2.1}/formwork/roles/method/lead.md +153 -20
  85. {formwork_kit-0.1.0 → formwork_kit-0.2.1}/formwork/roles/method/record-keeper.md +17 -13
  86. {formwork_kit-0.1.0 → formwork_kit-0.2.1}/formwork/roles/method/researcher.md +5 -5
  87. {formwork_kit-0.1.0 → formwork_kit-0.2.1}/formwork/roles/method/reviewer.md +9 -9
  88. {formwork_kit-0.1.0 → formwork_kit-0.2.1}/formwork/roles/packs/accessibility.md +18 -18
  89. {formwork_kit-0.1.0 → formwork_kit-0.2.1}/formwork/roles/packs/ai.md +5 -5
  90. {formwork_kit-0.1.0 → formwork_kit-0.2.1}/formwork/roles/packs/analyst.md +11 -11
  91. {formwork_kit-0.1.0 → formwork_kit-0.2.1}/formwork/roles/packs/backend.md +26 -26
  92. {formwork_kit-0.1.0 → formwork_kit-0.2.1}/formwork/roles/packs/brainstormer.md +8 -8
  93. {formwork_kit-0.1.0 → formwork_kit-0.2.1}/formwork/roles/packs/data.md +11 -11
  94. {formwork_kit-0.1.0 → formwork_kit-0.2.1}/formwork/roles/packs/devops.md +15 -15
  95. {formwork_kit-0.1.0 → formwork_kit-0.2.1}/formwork/roles/packs/frontend.md +13 -13
  96. {formwork_kit-0.1.0 → formwork_kit-0.2.1}/formwork/roles/packs/integrations.md +10 -10
  97. {formwork_kit-0.1.0 → formwork_kit-0.2.1}/formwork/roles/packs/legal.md +9 -9
  98. {formwork_kit-0.1.0 → formwork_kit-0.2.1}/formwork/roles/packs/marketing.md +8 -8
  99. {formwork_kit-0.1.0 → formwork_kit-0.2.1}/formwork/roles/packs/mobile.md +9 -9
  100. {formwork_kit-0.1.0 → formwork_kit-0.2.1}/formwork/roles/packs/performance.md +7 -7
  101. {formwork_kit-0.1.0 → formwork_kit-0.2.1}/formwork/roles/packs/product.md +8 -8
  102. {formwork_kit-0.1.0 → formwork_kit-0.2.1}/formwork/roles/packs/security.md +17 -17
  103. {formwork_kit-0.1.0 → formwork_kit-0.2.1}/formwork/roles/packs/sre.md +11 -11
  104. {formwork_kit-0.1.0 → formwork_kit-0.2.1}/formwork/roles/packs/tester.md +8 -8
  105. {formwork_kit-0.1.0 → formwork_kit-0.2.1}/formwork/roles/packs/user-researcher.md +4 -4
  106. {formwork_kit-0.1.0 → formwork_kit-0.2.1}/formwork/roles/packs/ux.md +6 -6
  107. {formwork_kit-0.1.0 → formwork_kit-0.2.1}/formwork/roles/packs/visual.md +9 -9
  108. {formwork_kit-0.1.0 → formwork_kit-0.2.1}/formwork/roles/packs/writer.md +6 -6
  109. {formwork_kit-0.1.0 → formwork_kit-0.2.1}/formwork/round.md +29 -5
  110. {formwork_kit-0.1.0 → formwork_kit-0.2.1}/formwork/rules/core.md +9 -9
  111. {formwork_kit-0.1.0 → formwork_kit-0.2.1}/formwork/rules/full.md +45 -26
  112. formwork_kit-0.2.1/formwork/setup +691 -0
  113. formwork_kit-0.2.1/formwork/style.md +113 -0
  114. {formwork_kit-0.1.0 → formwork_kit-0.2.1}/formwork/templates/brief.md +33 -2
  115. {formwork_kit-0.1.0 → formwork_kit-0.2.1}/formwork/templates/decision.md +5 -5
  116. {formwork_kit-0.1.0 → formwork_kit-0.2.1}/formwork/templates/predictions.md +2 -4
  117. {formwork_kit-0.1.0 → formwork_kit-0.2.1}/formwork/templates/report.md +9 -3
  118. {formwork_kit-0.1.0 → formwork_kit-0.2.1}/formwork/templates/round.md +1 -1
  119. formwork_kit-0.2.1/formwork/templates/standing.md +84 -0
  120. formwork_kit-0.2.1/formwork/test_install.py +289 -0
  121. formwork_kit-0.2.1/formwork/test_setup.py +353 -0
  122. formwork_kit-0.2.1/formwork/threads.md +231 -0
  123. {formwork_kit-0.1.0 → formwork_kit-0.2.1}/formwork/troubleshooting.md +15 -6
  124. {formwork_kit-0.1.0 → formwork_kit-0.2.1}/formwork_cli/__init__.py +4 -0
  125. formwork_kit-0.2.1/formwork_cli/__main__.py +19 -0
  126. {formwork_kit-0.1.0 → formwork_kit-0.2.1}/pyproject.toml +1 -1
  127. formwork_kit-0.1.0/PKG-INFO +0 -308
  128. formwork_kit-0.1.0/README.md +0 -279
  129. formwork_kit-0.1.0/formwork/test_install.py +0 -165
  130. {formwork_kit-0.1.0 → formwork_kit-0.2.1}/.gitignore +0 -0
  131. {formwork_kit-0.1.0 → formwork_kit-0.2.1}/LICENSE +0 -0
  132. {formwork_kit-0.1.0 → formwork_kit-0.2.1}/formwork/adapters/claude-code/settings.json +0 -0
  133. {formwork_kit-0.1.0 → formwork_kit-0.2.1}/formwork/check/checks/config-shape +0 -0
  134. {formwork_kit-0.1.0 → formwork_kit-0.2.1}/formwork/check/checks/decision-ids +0 -0
  135. {formwork_kit-0.1.0 → formwork_kit-0.2.1}/formwork/check/checks/doc-links +0 -0
  136. {formwork_kit-0.1.0 → formwork_kit-0.2.1}/formwork/check/checks/generated-current +0 -0
  137. {formwork_kit-0.1.0 → formwork_kit-0.2.1}/formwork/check/checks/guard-wired +0 -0
  138. {formwork_kit-0.1.0 → formwork_kit-0.2.1}/formwork/check/checks/kit-integrity +0 -0
  139. {formwork_kit-0.1.0 → formwork_kit-0.2.1}/formwork/check/checks/predictions-first +0 -0
  140. {formwork_kit-0.1.0 → formwork_kit-0.2.1}/formwork/check/checks/role-shape +0 -0
  141. {formwork_kit-0.1.0 → formwork_kit-0.2.1}/formwork/check/checks/rule-labels +0 -0
  142. {formwork_kit-0.1.0 → formwork_kit-0.2.1}/formwork/check/fixtures/config-shape/must-fail/documents-a-section-that-does-not-exist/.formwork.toml +0 -0
  143. {formwork_kit-0.1.0 → formwork_kit-0.2.1}/formwork/check/fixtures/config-shape/must-fail/documents-a-section-that-does-not-exist/formwork/guide.md +0 -0
  144. {formwork_kit-0.1.0 → formwork_kit-0.2.1}/formwork/check/fixtures/config-shape/must-fail/rules-as-a-switchboard/.formwork.toml +0 -0
  145. {formwork_kit-0.1.0 → formwork_kit-0.2.1}/formwork/check/fixtures/config-shape/must-pass/layers-kept-apart/.formwork.toml +0 -0
  146. {formwork_kit-0.1.0 → formwork_kit-0.2.1}/formwork/check/fixtures/decision-ids/must-fail/a-placeholder-shipped/docs/decisions/0003-still-pending.md +0 -0
  147. {formwork_kit-0.1.0 → formwork_kit-0.2.1}/formwork/check/fixtures/decision-ids/must-fail/superseded-by-nothing/docs/decisions/0002-old.md +0 -0
  148. {formwork_kit-0.1.0 → formwork_kit-0.2.1}/formwork/check/fixtures/decision-ids/must-fail/two-decisions-one-number/docs/decisions/0007-first.md +0 -0
  149. {formwork_kit-0.1.0 → formwork_kit-0.2.1}/formwork/check/fixtures/decision-ids/must-fail/two-decisions-one-number/docs/decisions/0007-second.md +0 -0
  150. {formwork_kit-0.1.0 → formwork_kit-0.2.1}/formwork/check/fixtures/decision-ids/must-pass/clean-numbering/docs/decisions/0001-the-first.md +0 -0
  151. {formwork_kit-0.1.0 → formwork_kit-0.2.1}/formwork/check/fixtures/decision-ids/must-pass/clean-numbering/docs/decisions/0002-the-second.md +0 -0
  152. {formwork_kit-0.1.0 → formwork_kit-0.2.1}/formwork/check/fixtures/decision-ids/must-pass/clean-numbering/docs/decisions/0003-the-third.md +0 -0
  153. {formwork_kit-0.1.0 → formwork_kit-0.2.1}/formwork/check/fixtures/decision-ids/must-pass/nothing-recorded-yet/docs/decisions/README.md +0 -0
  154. {formwork_kit-0.1.0 → formwork_kit-0.2.1}/formwork/check/fixtures/doc-links/must-fail/never-written/index.md +0 -0
  155. {formwork_kit-0.1.0 → formwork_kit-0.2.1}/formwork/check/fixtures/doc-links/must-fail/renamed-file/architecture-notes.md +0 -0
  156. {formwork_kit-0.1.0 → formwork_kit-0.2.1}/formwork/check/fixtures/doc-links/must-fail/renamed-file/guide.md +0 -0
  157. {formwork_kit-0.1.0 → formwork_kit-0.2.1}/formwork/check/fixtures/doc-links/must-pass/links-resolve/architecture-notes.md +0 -0
  158. {formwork_kit-0.1.0 → formwork_kit-0.2.1}/formwork/check/fixtures/doc-links/must-pass/links-resolve/guide.md +0 -0
  159. {formwork_kit-0.1.0 → formwork_kit-0.2.1}/formwork/check/fixtures/generated-current/must-fail/a-generated-file-was-edited/.claude/agents/sample.md +0 -0
  160. {formwork_kit-0.1.0 → formwork_kit-0.2.1}/formwork/check/fixtures/generated-current/must-fail/a-generated-file-was-edited/.codex/agents/sample.toml +0 -0
  161. {formwork_kit-0.1.0 → formwork_kit-0.2.1}/formwork/check/fixtures/generated-current/must-fail/a-generated-file-was-edited/.formwork.toml +0 -0
  162. {formwork_kit-0.1.0 → formwork_kit-0.2.1}/formwork/check/fixtures/generated-current/must-fail/a-generated-file-was-edited/.gemini/agents/sample.md +0 -0
  163. {formwork_kit-0.1.0 → formwork_kit-0.2.1}/formwork/check/fixtures/generated-current/must-fail/a-generated-file-was-edited/formwork/build +0 -0
  164. {formwork_kit-0.1.0 → formwork_kit-0.2.1}/formwork/check/fixtures/generated-current/must-fail/a-generated-file-was-edited/formwork/roles/method/sample.md +0 -0
  165. {formwork_kit-0.1.0 → formwork_kit-0.2.1}/formwork/check/fixtures/generated-current/must-pass/generated-and-current/.claude/agents/sample.md +0 -0
  166. {formwork_kit-0.1.0 → formwork_kit-0.2.1}/formwork/check/fixtures/generated-current/must-pass/generated-and-current/.codex/agents/sample.toml +0 -0
  167. {formwork_kit-0.1.0 → formwork_kit-0.2.1}/formwork/check/fixtures/generated-current/must-pass/generated-and-current/.formwork.toml +0 -0
  168. {formwork_kit-0.1.0 → formwork_kit-0.2.1}/formwork/check/fixtures/generated-current/must-pass/generated-and-current/.gemini/agents/sample.md +0 -0
  169. {formwork_kit-0.1.0 → formwork_kit-0.2.1}/formwork/check/fixtures/generated-current/must-pass/generated-and-current/formwork/build +0 -0
  170. {formwork_kit-0.1.0 → formwork_kit-0.2.1}/formwork/check/fixtures/generated-current/must-pass/generated-and-current/formwork/roles/method/sample.md +0 -0
  171. {formwork_kit-0.1.0 → formwork_kit-0.2.1}/formwork/check/fixtures/generated-current/must-pass/nothing-is-generated-here/README.md +0 -0
  172. {formwork_kit-0.1.0 → formwork_kit-0.2.1}/formwork/check/fixtures/guard-wired/must-fail/declared-but-no-file/.formwork.toml +0 -0
  173. {formwork_kit-0.1.0 → formwork_kit-0.2.1}/formwork/check/fixtures/guard-wired/must-fail/file-but-not-wired/.claude/settings.json +0 -0
  174. {formwork_kit-0.1.0 → formwork_kit-0.2.1}/formwork/check/fixtures/guard-wired/must-fail/file-but-not-wired/.formwork.toml +0 -0
  175. {formwork_kit-0.1.0 → formwork_kit-0.2.1}/formwork/check/fixtures/guard-wired/must-pass/declared-and-wired/.claude/settings.json +0 -0
  176. {formwork_kit-0.1.0 → formwork_kit-0.2.1}/formwork/check/fixtures/guard-wired/must-pass/declared-and-wired/.formwork.toml +0 -0
  177. {formwork_kit-0.1.0 → formwork_kit-0.2.1}/formwork/check/fixtures/guard-wired/must-pass/nothing-declared/README.md +0 -0
  178. {formwork_kit-0.1.0 → formwork_kit-0.2.1}/formwork/check/fixtures/kit-integrity/must-fail/a-check-went-missing/formwork/check/checks/still-here +0 -0
  179. {formwork_kit-0.1.0 → formwork_kit-0.2.1}/formwork/check/fixtures/kit-integrity/must-fail/a-check-went-missing/state/fingerprints.txt +0 -0
  180. {formwork_kit-0.1.0 → formwork_kit-0.2.1}/formwork/check/fixtures/kit-integrity/must-fail/a-guard-was-altered/formwork/guard/git-boundary +0 -0
  181. {formwork_kit-0.1.0 → formwork_kit-0.2.1}/formwork/check/fixtures/kit-integrity/must-fail/a-guard-was-altered/state/fingerprints.txt +0 -0
  182. {formwork_kit-0.1.0 → formwork_kit-0.2.1}/formwork/check/fixtures/kit-integrity/must-pass/everything-matches/formwork/guard/git-boundary +0 -0
  183. {formwork_kit-0.1.0 → formwork_kit-0.2.1}/formwork/check/fixtures/kit-integrity/must-pass/everything-matches/state/fingerprints.txt +0 -0
  184. {formwork_kit-0.1.0 → formwork_kit-0.2.1}/formwork/check/fixtures/predictions-first/must-fail/argued-with-no-predictions/docs/rounds/0004-the-storage-question/architect.md +0 -0
  185. {formwork_kit-0.1.0 → formwork_kit-0.2.1}/formwork/check/fixtures/predictions-first/must-fail/argued-with-no-predictions/docs/rounds/0004-the-storage-question/researcher.md +0 -0
  186. {formwork_kit-0.1.0 → formwork_kit-0.2.1}/formwork/check/fixtures/predictions-first/must-fail/argued-with-no-predictions/docs/rounds/0004-the-storage-question/round.md +0 -0
  187. {formwork_kit-0.1.0 → formwork_kit-0.2.1}/formwork/check/fixtures/predictions-first/must-pass/a-round-that-has-not-argued-yet/docs/rounds/0006-not-started/round.md +0 -0
  188. {formwork_kit-0.1.0 → formwork_kit-0.2.1}/formwork/check/fixtures/predictions-first/must-pass/no-rounds-at-all/docs/README.md +0 -0
  189. {formwork_kit-0.1.0 → formwork_kit-0.2.1}/formwork/check/fixtures/predictions-first/must-pass/predictions-on-record/docs/rounds/0005-the-shape-of-a-brief/architect.md +0 -0
  190. {formwork_kit-0.1.0 → formwork_kit-0.2.1}/formwork/check/fixtures/predictions-first/must-pass/predictions-on-record/docs/rounds/0005-the-shape-of-a-brief/predictions.md +0 -0
  191. {formwork_kit-0.1.0 → formwork_kit-0.2.1}/formwork/check/fixtures/predictions-first/must-pass/predictions-on-record/docs/rounds/0005-the-shape-of-a-brief/researcher.md +0 -0
  192. {formwork_kit-0.1.0 → formwork_kit-0.2.1}/formwork/check/fixtures/role-shape/must-fail/claims-a-grant-binds-everywhere/formwork/roles/README.md +0 -0
  193. {formwork_kit-0.1.0 → formwork_kit-0.2.1}/formwork/check/fixtures/role-shape/must-fail/claims-a-grant-binds-everywhere/formwork/roles/complete.md +0 -0
  194. {formwork_kit-0.1.0 → formwork_kit-0.2.1}/formwork/check/fixtures/role-shape/must-fail/missing-a-section/formwork/roles/vague.md +0 -0
  195. {formwork_kit-0.1.0 → formwork_kit-0.2.1}/formwork/check/fixtures/role-shape/must-fail/spawn-without-being-lead/formwork/roles/eager.md +0 -0
  196. {formwork_kit-0.1.0 → formwork_kit-0.2.1}/formwork/check/fixtures/role-shape/must-fail/two-roles-one-job/formwork/roles/first.md +0 -0
  197. {formwork_kit-0.1.0 → formwork_kit-0.2.1}/formwork/check/fixtures/role-shape/must-fail/two-roles-one-job/formwork/roles/second.md +0 -0
  198. {formwork_kit-0.1.0 → formwork_kit-0.2.1}/formwork/check/fixtures/role-shape/must-pass/well-formed/formwork/roles/complete.md +0 -0
  199. {formwork_kit-0.1.0 → formwork_kit-0.2.1}/formwork/check/fixtures/rule-labels/must-fail/claims-enforcement-that-does-not-exist/formwork/rules/core.md +0 -0
  200. {formwork_kit-0.1.0 → formwork_kit-0.2.1}/formwork/check/fixtures/rule-labels/must-fail/no-catches/formwork/rules/core.md +0 -0
  201. {formwork_kit-0.1.0 → formwork_kit-0.2.1}/formwork/check/fixtures/rule-labels/must-fail/unlabelled/formwork/rules/core.md +0 -0
  202. {formwork_kit-0.1.0 → formwork_kit-0.2.1}/formwork/check/fixtures/rule-labels/must-pass/well-formed/formwork/rules/core.md +0 -0
  203. {formwork_kit-0.1.0 → formwork_kit-0.2.1}/formwork/check/run +0 -0
  204. {formwork_kit-0.1.0 → formwork_kit-0.2.1}/formwork/check/test_gate.py +0 -0
  205. {formwork_kit-0.1.0 → formwork_kit-0.2.1}/formwork/guard/git-boundary +0 -0
  206. {formwork_kit-0.1.0 → formwork_kit-0.2.1}/formwork/guard/protected-files +0 -0
  207. {formwork_kit-0.1.0 → formwork_kit-0.2.1}/formwork/guard/quality-gate +0 -0
  208. {formwork_kit-0.1.0 → formwork_kit-0.2.1}/formwork/guard/test_boundary.py +0 -0
  209. {formwork_kit-0.1.0 → formwork_kit-0.2.1}/formwork/guard/test_protection.py +0 -0
  210. {formwork_kit-0.1.0 → formwork_kit-0.2.1}/formwork/guard/test_quality_gate.py +0 -0
  211. {formwork_kit-0.1.0 → formwork_kit-0.2.1}/formwork/roles/TEMPLATE.md +0 -0
@@ -12,16 +12,13 @@ Everything is one loop. Only the size changes.
12
12
  BRIEF → WORK → CHECK → REPORT → STOP → you say go → BRIEF …
13
13
  ```
14
14
 
15
- | Size | How long | The brief is | The report is |
16
- |---|---|---|---|
17
- | task | minutes | one line | files changed, check result |
18
- | checkpoint | one sitting | six headings | the full list |
19
- | round | hours to days | a question per role | a round record |
20
- | phase | weeks | what it settles | one document |
21
- | milestone | months | a direction | — |
15
+ **The agent halts at STOP and waits for you**, however small the job was.
22
16
 
23
- Each one answers four questions: what it produces, what must be true before it
24
- starts, who says go, and **what would tell us it failed.**
17
+ Five sizes run this way, from a task of minutes to a milestone of months. The
18
+ sizes, and how to pick one, are in [`formwork/loop.md`](formwork/loop.md).
19
+
20
+ Work is handed down from a planning conversation and reported back up by you.
21
+ That part is in [`formwork/threads.md`](formwork/threads.md).
25
22
 
26
23
  ---
27
24
 
@@ -39,10 +36,14 @@ These do not ask you. They refuse.
39
36
  | A declared runtime is actually wired up | `formwork/check/checks/guard-wired` |
40
37
  | The agent does not quietly alter the kit's own files | `formwork/guard/protected-files` |
41
38
  | A turn does not end while the aggregate is red | `formwork/guard/quality-gate` |
39
+ | The standing brief is not older than the newest decision | `formwork/check/checks/standing-current` |
40
+ | Work marked finished left a report behind | `formwork/check/checks/work-paired` |
41
+ | Every generated role names the style page | `formwork/check/checks/style-pointed` |
42
42
 
43
43
  > [!NOTE]
44
- > **The last one refuses three times in a session, then stands aside**, so a
45
- > genuinely stuck turn is not trapped for ever. Change it with `gate_budget`.
44
+ > **The turn-end gate refuses three times in a session, then stands aside**, so
45
+ > a genuinely stuck turn is not trapped for ever. Change it with `gate_budget`.
46
+ > The rows below it are checks, and none of them has a budget.
46
47
 
47
48
  Run them:
48
49
 
@@ -60,10 +61,10 @@ instead: `formwork/fw check`, `formwork/fw demo`, `formwork/fw roles`. Run
60
61
 
61
62
  ## What is advice
62
63
 
63
- Everything else. **46 rules**, in two files.
64
+ Everything else. **47 rules**, in two files.
64
65
 
65
- - `formwork/rules/core.md` — 13. You meet these every day.
66
- - `formwork/rules/full.md` — 33. Read one when you hit the situation it covers.
66
+ - `formwork/rules/core.md` holds 13. You meet these every day.
67
+ - `formwork/rules/full.md` holds 34. Read one when you hit the situation.
67
68
 
68
69
  > [!TIP]
69
70
  > Every rule says what it catches. None of them tells you a story, because the
@@ -89,7 +90,7 @@ A rule you follow without understanding gets dropped quietly later anyway.
89
90
 
90
91
  ## Settings
91
92
 
92
- This is the whole file, and the installer writes it for you:
93
+ One file, `.formwork.toml`, and the installer writes it for you:
93
94
 
94
95
  ```toml
95
96
  [bindings]
@@ -98,17 +99,27 @@ runtime = "claude-code" # which tool you use
98
99
  [strength]
99
100
  git_boundary = "block" # block | warn | off
100
101
  protect_files = "block" # block | warn | off
102
+ aggregate_gate = "block" # the turn-end gate
103
+ gate_budget = 3 # refusals before it stands aside
101
104
  ```
102
105
 
103
- `[strength]` tunes how hard the enforced guards bite. `[bindings]` is your
104
- setup. There is no third section: see above.
106
+ `[bindings]` is your setup. `[strength]` tunes how hard the enforced guards
107
+ bite. There is no third section: see above.
105
108
 
106
- **Two more keys exist and both live in `[strength]`:**
109
+ **The last two lines appear only once you change them.** They have working
110
+ defaults, so a fresh file is shorter than this.
107
111
 
108
- ```toml
109
- aggregate_gate = "block" # block | warn | off. The turn-end gate
110
- gate_budget = 3 # how many times it refuses before standing aside
111
- ```
112
+ **You do not have to write any of it by hand.** `formwork setup` asks a few
113
+ questions once, shows you everything it is about to do, and writes it only if
114
+ you say yes:
115
+
116
+ - `docs/style.md`, from how you said you want to be spoken to
117
+ - `docs/standing.md`, seeded with what you are building and what is next
118
+ - `docs/decisions/`, `docs/briefs/`, `docs/reports/`, started and explained
119
+ - the `[strength]` values, including `gate_budget`
120
+
121
+ It never overwrites a file you already have, and it never touches
122
+ `[bindings]`, which the installer worked out by looking at your project.
112
123
 
113
124
  For one session only:
114
125
 
@@ -122,7 +133,7 @@ FORMWORK_GATE=off
122
133
 
123
134
  ## Your team
124
135
 
125
- `formwork/roles/` holds 27 roles. Six run the method. Twenty-one do the work,
136
+ `formwork/roles/` holds 28 roles. Seven run the method. Twenty-one do the work,
126
137
  grouped into packs.
127
138
 
128
139
  **All of them are available. There is no switch yet**, and this page says so
@@ -131,6 +142,9 @@ rather than describing one that does not exist.
131
142
  Adding your own is copying `TEMPLATE.md`, filling in five sections and four
132
143
  frontmatter fields. A role missing any of them does not load.
133
144
 
145
+ **How they talk to you** is one page, [`formwork/style.md`](formwork/style.md),
146
+ pointed at from every generated role. Your own `docs/style.md` overrides it.
147
+
134
148
  The installer generates them for your runtime. To regenerate after an edit:
135
149
 
136
150
  ```
@@ -155,9 +169,9 @@ trusting any of this further than it deserves.
155
169
  **A check that refuses rather than advises.** Most tooling tells you something
156
170
  is wrong and lets the work continue. This stops the turn.
157
171
 
158
- **Rules about what counts as evidence.** A figure is reported together with the
159
- command behind it. Anything unmeasured says so in capitals. A check that nobody has
160
- watched fail is not treated as proof of anything.
172
+ **Rules about what counts as evidence.** A figure arrives with the command
173
+ behind it. A gap is named rather than filled. A check nobody has watched fail
174
+ is not treated as proof of anything.
161
175
 
162
176
  Both came out of real use. Neither has been tried by anybody else yet, and the
163
177
  kit would rather say that than imply a crowd that does not exist.
@@ -177,6 +191,7 @@ would establish the rest.
177
191
  [`formwork/first-run.md`](formwork/first-run.md). Fifteen minutes, on your own
178
192
  project.
179
193
 
180
- Then [`formwork/loop.md`](formwork/loop.md) for the working loop, and
181
- [`formwork/round.md`](formwork/round.md) when a decision is expensive enough to
182
- be worth a round.
194
+ Then [`formwork/loop.md`](formwork/loop.md) for the working loop,
195
+ [`formwork/threads.md`](formwork/threads.md) for how work starts and where the
196
+ plan lives between conversations, and [`formwork/round.md`](formwork/round.md)
197
+ when a decision is expensive enough to be worth a round.
@@ -0,0 +1,505 @@
1
+ Metadata-Version: 2.5
2
+ Name: formwork-kit
3
+ Version: 0.2.1
4
+ Summary: You bring the idea. It brings the whole team. Rules your coding agent cannot ignore.
5
+ Project-URL: Homepage, https://github.com/makariim/formwork
6
+ Project-URL: Source, https://github.com/makariim/formwork
7
+ Project-URL: Issues, https://github.com/makariim/formwork/issues
8
+ Author: Muhammad Elsherif
9
+ License-Expression: MIT
10
+ License-File: LICENSE
11
+ Keywords: agents,ai,claude,coding-agent,project-management
12
+ Classifier: Development Status :: 4 - Beta
13
+ Classifier: Environment :: Console
14
+ Classifier: Intended Audience :: Developers
15
+ Classifier: License :: OSI Approved :: MIT License
16
+ Classifier: Operating System :: MacOS
17
+ Classifier: Operating System :: POSIX :: Linux
18
+ Classifier: Programming Language :: Python :: 3
19
+ Classifier: Programming Language :: Python :: 3 :: Only
20
+ Classifier: Programming Language :: Python :: 3.8
21
+ Classifier: Programming Language :: Python :: 3.9
22
+ Classifier: Programming Language :: Python :: 3.10
23
+ Classifier: Programming Language :: Python :: 3.11
24
+ Classifier: Programming Language :: Python :: 3.12
25
+ Classifier: Programming Language :: Python :: 3.13
26
+ Classifier: Topic :: Software Development :: Quality Assurance
27
+ Requires-Python: >=3.8
28
+ Description-Content-Type: text/markdown
29
+
30
+ <div align="center">
31
+
32
+ <picture>
33
+ <source media="(prefers-color-scheme: dark)" srcset="assets/logo-dark.svg">
34
+ <img src="assets/logo-light.svg" width="96" alt="">
35
+ </picture>
36
+
37
+ # Formwork
38
+
39
+ **You bring the idea. It brings the whole team.**
40
+
41
+ *Not a typo. Builders use formwork to hold a shape until it can stand on its
42
+ own. Projects never had that. Now they do.*
43
+
44
+ [![licence](https://img.shields.io/badge/licence-MIT-green.svg)](LICENSE)
45
+
46
+ </div>
47
+
48
+ ---
49
+
50
+ <div align="center">
51
+
52
+ | A team | A way of working | Rules that refuse |
53
+ |:--:|:--:|:--:|
54
+ | everyone a project needs | brief, work, check, report, stop | some mistakes cannot happen |
55
+
56
+ </div>
57
+
58
+ ```console
59
+ $ pipx install formwork-kit
60
+ $ formwork init && formwork install
61
+ $ formwork setup && formwork check
62
+ GATE: green. 12 check(s), each shown to reject the wrong and accept the right.
63
+ ```
64
+
65
+ <div align="center">
66
+
67
+ [Which agent you use](#which-agent-you-use-changes-what-you-get) ·
68
+ [Install](#install) · [Your first turn](#your-first-turn) ·
69
+ [Settings](#settings) · [What is inside](#what-is-inside) ·
70
+ [What it will not pretend](#what-this-will-not-pretend) ·
71
+ [Version one](#this-is-version-one) ·
72
+ [Where to go next](#where-to-go-next)
73
+
74
+ </div>
75
+
76
+ ---
77
+
78
+ ## Ideas do not die at the idea
79
+
80
+ They die at what comes next.
81
+
82
+ You need someone to find the holes in your plan. Someone who knows what breaks
83
+ at 3am, what a screen should do, what the small print means. You need your
84
+ choices written down so you are not arguing about them again next month. Most
85
+ of all you need someone who will tell you no.
86
+
87
+ That used to mean hiring people. People cost money. Hiring takes time.
88
+
89
+ **Now it is a folder you copy into your project.**
90
+
91
+ Twenty eight roles, already written. A director, a lead, a challenger, a
92
+ researcher, a reviewer. Engineers for the back end, the front end, phones,
93
+ data, servers and safety. A designer, a writer, a product person, a marketer.
94
+ Someone who tells you when to call a real lawyer.
95
+
96
+ Nobody to hire. Nobody to wait for. They are in the folder.
97
+
98
+ ---
99
+
100
+ ## Who it is for
101
+
102
+ **Anyone building something with an AI agent.**
103
+
104
+ **New to this?** The team, the order of work, the notes and the rules all
105
+ arrive working. You bring the idea.
106
+
107
+ **Done it many times?** Now it sits where your agents can read it, and some of
108
+ it they cannot ignore. Delete the rules you disagree with. Rewrite any role you
109
+ know better.
110
+
111
+ **Expert in one thing?** Your role file will be thinner than you are. Replace
112
+ it. Everything else keeps working around it.
113
+
114
+ ---
115
+
116
+ ## What you get
117
+
118
+ **A way of working.** You say what you want. The agent works. The checks run.
119
+ It tells you what it did, then stops and waits for you.
120
+
121
+ **Notes that stay put.** Choices get a number and a page in your repository,
122
+ instead of living in a chat you will close and lose.
123
+
124
+ **Rules your agent cannot ignore.** Not tips. Real refusals.
125
+
126
+ ```console
127
+ you: commit this for me
128
+ agent: REFUSED by the version-control boundary: git commit changes
129
+ the repository.
130
+ ```
131
+
132
+ Nobody read you a rule. You watched it work.
133
+
134
+ > [!IMPORTANT]
135
+ > That is the whole idea. You think about what you are building. The kit holds
136
+ > everything else.
137
+
138
+ ---
139
+
140
+ ## Which agent you use changes what you get
141
+
142
+ Read this before installing. It decides whether your first `formwork check`
143
+ comes back green.
144
+
145
+ | Agent | Can it stop a command? |
146
+ |---|---|
147
+ | **Claude Code** | Yes. Seen doing it |
148
+ | **Codex** | It should. Nobody has tried |
149
+ | **Cursor** | It should. Nobody has tried |
150
+ | **Gemini CLI** | It should. Nobody has tried |
151
+
152
+ **On Claude Code everything below works as written.**
153
+
154
+ **On the other three, the install finishes and `formwork check` comes back
155
+ red**, because the file that hooks the guards into your agent does not exist
156
+ yet and you have to write it. Your agent's page in `formwork/adapters/` says
157
+ exactly what goes in it. **Red is the honest answer there: nothing is guarding
158
+ you yet.**
159
+
160
+ Everything else works on all four from the start: the roles, the rules, the
161
+ checks, the templates, the loop.
162
+
163
+ **Setting one of those three up is the most useful thing anybody can do for
164
+ this project.** [CONTRIBUTING.md](CONTRIBUTING.md) says what to send back.
165
+
166
+ ---
167
+
168
+ ## Install
169
+
170
+ | You need | Check it |
171
+ |---|---|
172
+ | **Python 3.8 or newer** | `python3 --version` |
173
+ | **git** | `git --version` |
174
+ | **An AI coding agent** | Claude Code, Codex, Cursor or Gemini CLI |
175
+
176
+ **Two ways in. They end in the same place.**
177
+
178
+ ### 1. As a package
179
+
180
+ ```
181
+ pipx install formwork-kit
182
+ ```
183
+
184
+ pipx puts the `formwork` command on your path and keeps it in its own
185
+ environment, away from your project's packages.
186
+
187
+ > [!IMPORTANT]
188
+ > **If you used plain `pip` instead, `formwork` will say `command not found`.**
189
+ > It installed fine. pip put the command in a folder your shell does not
190
+ > search. You do not have to fix anything: put `python3 -m formwork_cli` in
191
+ > front of every command below and they all work.
192
+ >
193
+ > ```
194
+ > python3 -m formwork_cli init
195
+ > ```
196
+
197
+ Then, in your project:
198
+
199
+ ```
200
+ cd /your/project
201
+ formwork init
202
+ formwork install --runtime claude-code # or codex, cursor, gemini-cli
203
+ formwork setup
204
+ formwork check
205
+ ```
206
+
207
+ **That last line should say green on Claude Code**, and red on the other three
208
+ until you write the hook file, as above.
209
+
210
+ Leave `--runtime` off and it finds your agent itself. When you have more than
211
+ one set up, or none yet, it stops and tells you to name one.
212
+
213
+ > [!TIP]
214
+ > **Would you rather be walked through it?**
215
+ > [`formwork/first-run.md`](formwork/first-run.md) is the same five commands
216
+ > with somebody explaining each one: what it writes, what the exit codes mean,
217
+ > what to do when your agent cannot block, and a first piece of real work at
218
+ > the end. About fifteen minutes.
219
+
220
+ <details>
221
+ <summary><b>Other ways to install the package, and what to do when the command is not found</b></summary>
222
+
223
+ <br>
224
+
225
+ **In a virtual environment**, where the command lives inside it:
226
+
227
+ ```
228
+ python3 -m venv .venv
229
+ source .venv/bin/activate # Windows: .venv\Scripts\activate
230
+ python3 -m pip install formwork-kit
231
+ ```
232
+
233
+ **With pip directly, say `python3 -m pip install formwork-kit`.** Typing `pip`
234
+ or `pip3` can reach a different Python than the one you run, and then the
235
+ package installs somewhere your `python3` never looks.
236
+
237
+ **If `formwork` says `command not found`,** it installed fine and the command
238
+ landed in a folder your shell does not search. You do not have to fix your
239
+ path. Either of these works instead:
240
+
241
+ ```
242
+ python3 -m formwork_cli check the same command, run through Python
243
+ formwork/fw check the kit's own command, needs no install
244
+ ```
245
+
246
+ The second one only works after `formwork init`, because that is what puts the
247
+ kit in your project. If you never got that far, use the first one, or install
248
+ with pipx and start again.
249
+
250
+ </details>
251
+
252
+ ### 2. As files, with nothing installed
253
+
254
+ **There is no package to install and nothing to import.** The kit is text files
255
+ and small Python programs, and it runs from where it sits.
256
+
257
+ ```
258
+ git clone https://github.com/makariim/formwork.git the-kit
259
+ cp -R the-kit/formwork the-kit/FORMWORK.md /your/project/
260
+
261
+ cd /your/project
262
+ formwork/fw install --runtime claude-code # or codex, cursor, gemini-cli
263
+ formwork/fw setup
264
+ formwork/fw check
265
+ ```
266
+
267
+ The copy is the whole kit, so you can delete `the-kit` afterwards. There is no
268
+ `init` step here, because copying the folder in **is** the init step.
269
+
270
+ `formwork check` becomes `formwork/fw check`, and the same for `install`,
271
+ `setup`, `demo`, `roles`, `record` and `test`. Run `formwork/fw` on its own for
272
+ the list. `where` and `version` belong to the installed command only.
273
+
274
+ ### What each step does
275
+
276
+ | | |
277
+ |---|---|
278
+ | `init` | puts `formwork/` and `FORMWORK.md` into your project |
279
+ | `install` | wires the guards into your agent, writes your role files. Add `--runtime <name>` when it cannot tell |
280
+ | `setup` | asks eleven questions once, then writes your style file, your standing brief, and the folders for decisions, briefs and reports |
281
+ | `check` | runs all twelve checks and says green or red |
282
+
283
+ **What it touches.** It adds `formwork/` and `FORMWORK.md`, writes
284
+ `.formwork.toml`, writes your agent's settings file keeping anything already
285
+ there, generates one role file per role into your agent's folder, and puts one
286
+ file in `~/.formwork/` holding a fingerprint of each file that enforces a
287
+ rule.
288
+
289
+ | System | Does it work? |
290
+ |---|---|
291
+ | **macOS** | Yes. Built and used here |
292
+ | **Linux** | Should do. Nobody has tried. **Try it and tell us** |
293
+ | **Windows** | The command installs. The guards assume a unix shell and nobody has run them there |
294
+
295
+ ---
296
+
297
+ ## Your first turn
298
+
299
+ The kit is files, and your agent reads files. So the first turn is you telling
300
+ it to. Four that cover most of it:
301
+
302
+ **Starting something new**
303
+
304
+ > Read `FORMWORK.md` and `formwork/first-run.md`. Then use the director role to
305
+ > write me a brief for a command line tool that renames photos by the date they
306
+ > were taken. Size the brief to the work. Do not build anything yet.
307
+
308
+ *The **director** is the role that holds the plan and writes the briefs. It
309
+ never builds anything.*
310
+
311
+ **Picking up a project that already exists**
312
+
313
+ > Read `FORMWORK.md`, then `docs/standing.md`. Tell me where we are in four
314
+ > lines, and what you think the next piece of work is.
315
+
316
+ *`docs/standing.md` is the **standing brief**, the one file that says where the
317
+ project stands. `formwork setup` starts it for you. It is what stops every new
318
+ window beginning with you retelling the whole story.*
319
+
320
+ **Handing over one piece of work**
321
+
322
+ > Here is the brief. [paste it] Do only what it says, nothing next to it. Check
323
+ > your work with `formwork check`, tell me what you did, and stop there.
324
+
325
+ **Asking one role for an opinion**
326
+
327
+ > Use the security role. Read `formwork/guard/` and tell me what an attacker
328
+ > would try first.
329
+
330
+ **Then it stops and waits for you.** That is the shape, and it is the part
331
+ people are surprised by. It does not carry on to the next thing because the
332
+ next thing is obvious.
333
+
334
+ ---
335
+
336
+ ## Settings
337
+
338
+ One file, `.formwork.toml`, in your project. The installer writes it and
339
+ `formwork setup` fills it in by asking you.
340
+
341
+ ```toml
342
+ [bindings]
343
+ runtime = "claude-code" # which agent you use
344
+
345
+ [strength]
346
+ git_boundary = "block" # block | warn | off
347
+ protect_files = "block"
348
+ aggregate_gate = "block"
349
+ gate_budget = 3
350
+ ```
351
+
352
+ **Your file will be shorter than that**, and nothing is wrong. The installer
353
+ writes the first two `[strength]` keys. The other two have working defaults, so
354
+ they only appear once you change them. Adding them by hand works too.
355
+
356
+ | When you would change something | What to change |
357
+ |---|---|
358
+ | you moved to a different agent | `runtime` |
359
+ | a guard keeps stopping work you meant | that key to `warn`. It runs, and tells you |
360
+ | you are only trying the kit out | that key to `off` |
361
+ | a genuinely stuck turn keeps being refused | `gate_budget`, how many refusals before the gate stands aside |
362
+
363
+ **For one session only**, without editing anything:
364
+
365
+ ```
366
+ FORMWORK_GIT_BOUNDARY=off
367
+ FORMWORK_PROTECT_FILES=warn
368
+ FORMWORK_GATE=off
369
+ ```
370
+
371
+ **Rules are not configured here.** There is no `[rules]` section and adding one
372
+ fails a check. You drop a rule by deleting it from `formwork/rules/core.md`.
373
+ [`FORMWORK.md`](FORMWORK.md) says why it works that way.
374
+
375
+ **How the agents talk to you is not in this file.** That is
376
+ [`formwork/style.md`](formwork/style.md), and your own `docs/style.md` written
377
+ in your own words, which beats it. Every role points at both.
378
+
379
+ ---
380
+
381
+ ## What is inside
382
+
383
+ | | | count it yourself |
384
+ |---|---|---|
385
+ | **3 guards** | small programs that refuse. Two stop a command, one stops a turn ending | `ls formwork/guard \| grep -v test_` |
386
+ | **12 checks** | small programs that read your project and say green or red | `ls formwork/check/checks \| wc -l` |
387
+ | **28 roles** | one file each, saying what that job does and where it stops | `ls formwork/roles/*/*.md \| wc -l` |
388
+ | **47 rules** | 13 you meet daily, 34 for when you need them | `grep -c '^### ' formwork/rules/*.md` |
389
+ | **356 tests** | every guard and check, proved able to fail | `formwork test` |
390
+
391
+ It is all text files and small programs. You can read every line. Nothing is
392
+ hidden. Nothing is sent anywhere.
393
+
394
+ ---
395
+
396
+ ## Every check has been watched failing
397
+
398
+ A check nobody has seen fail proves nothing.
399
+
400
+ So each check ships test cases of both kinds: at least one it must reject, at
401
+ least one it must accept. It has to tell them apart. Watch it yourself with
402
+ `formwork demo`.
403
+
404
+ ---
405
+
406
+ ## What this will not pretend
407
+
408
+ Every number here comes with the command that made it. Anything unmeasured says
409
+ so in capitals rather than guessing. There are three:
410
+
411
+ | | |
412
+ |---|---|
413
+ | **What a round costs in money** | never measured. [`COSTS.md`](formwork/COSTS.md) says NOT ESTABLISHED instead of guessing |
414
+ | **Whether the guards stop a determined agent** | they do not. [`limits.md`](formwork/limits.md) lists every route anybody has found |
415
+ | **Whether three of the four agents work** | nobody has tried them. Said once already, near the top, because it changes what you get |
416
+
417
+ > [!WARNING]
418
+ > The guards stop the ordinary path, not a clever one. If you need real safety,
419
+ > use a sandbox.
420
+
421
+ Every time this kit failed on the person who wrote it, the failure went into
422
+ [`docs/dogfood.md`](docs/dogfood.md) instead of being quietly patched. That page
423
+ is the best reason to trust the rest.
424
+
425
+ ---
426
+
427
+ ## This is version one
428
+
429
+ What is here is built and tested. What is not here, and is not being worked on
430
+ today:
431
+
432
+ | | |
433
+ |---|---|
434
+ | **Skills** | one word for a common job, instead of a paragraph. Considered, not started |
435
+ | **A model per role** | pick the model and effort level for each role. Only Claude Code is known to allow it. Nobody has checked the other three, so this would be one agent out of four until somebody does |
436
+ | **Teams** | more than one person on the same standing brief. Today the method says one director at a time, and nobody has tried two |
437
+ | **Roles invented on the fly** | asked for by somebody who tried the kit. It cuts across the check that stops two roles owning one job, so it stays a question we have not settled |
438
+
439
+ None of these is promised. They are written down so you can see the edge of
440
+ what is here.
441
+
442
+ Version one is not a draft. It is what one person built, used, and broke on
443
+ purpose. **NOT ESTABLISHED: whether any of it works for more than one person.**
444
+
445
+ ---
446
+
447
+ ## Where to go next
448
+
449
+ **[`formwork/first-run.md`](formwork/first-run.md)**. It walks you through the
450
+ install, makes you watch a guard refuse something, and has you do one small
451
+ real piece of work. On your own project, not a pretend one. About fifteen
452
+ minutes.
453
+
454
+ **Then [`FORMWORK.md`](FORMWORK.md)**, the whole method on one page. It reads
455
+ better after you have run it once than before.
456
+
457
+ ---
458
+
459
+ ## Everything else
460
+
461
+ **While you work**
462
+
463
+ | | |
464
+ |---|---|
465
+ | [`loop.md`](formwork/loop.md) | how one job goes, start to finish |
466
+ | [`threads.md`](formwork/threads.md) | how work starts, and where the plan lives between conversations |
467
+ | [`style.md`](formwork/style.md) | how the agents talk to you, and how to change it |
468
+ | [`round.md`](formwork/round.md) | how to run a round, and when it is worth it |
469
+ | [`templates/`](formwork/templates/) | brief, predictions, report, decision, round, standing brief |
470
+ | [`roles/`](formwork/roles/) | the roles, and how to write your own |
471
+ | [`rules/`](formwork/rules/) | the rules, each saying what it catches |
472
+
473
+ **When you need it**
474
+
475
+ | | |
476
+ |---|---|
477
+ | [`troubleshooting.md`](formwork/troubleshooting.md) | every error message and what to do |
478
+ | [`glossary.md`](formwork/glossary.md) | every word we use, in plain language |
479
+ | [`limits.md`](formwork/limits.md) | what this kit cannot do |
480
+ | [`COSTS.md`](formwork/COSTS.md) | what it costs, and the number nobody has |
481
+ | [`FAQ.md`](FAQ.md) | questions people ask |
482
+
483
+ **How it was built**
484
+
485
+ | | |
486
+ |---|---|
487
+ | [`docs/`](docs/) | the survey, the design, and what broke |
488
+ | [`docs/dogfood.md`](docs/dogfood.md) | the kit failing on its own author, written down |
489
+ | [`RELEASING.md`](RELEASING.md) | for the maintainer |
490
+
491
+ ---
492
+
493
+ ## Contributing
494
+
495
+ Forks are the point. The most useful thing you can send is a command that got
496
+ past a guard, or one that was stopped when it should not have been.
497
+
498
+ [CONTRIBUTING.md](CONTRIBUTING.md) has the rest, and
499
+ [SECURITY.md](SECURITY.md) is for anything you would rather not post in public.
500
+
501
+ ---
502
+
503
+ ## Licence
504
+
505
+ MIT. See [LICENSE](LICENSE).