bantamkit 0.35.9__tar.gz → 0.36.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 (248) hide show
  1. bantamkit-0.35.9/README.md → bantamkit-0.36.1/PKG-INFO +143 -64
  2. bantamkit-0.35.9/PKG-INFO → bantamkit-0.36.1/README.md +112 -93
  3. {bantamkit-0.35.9 → bantamkit-0.36.1}/_assets/tools/bantamkit_status.json +8 -2
  4. {bantamkit-0.35.9 → bantamkit-0.36.1}/_assets/tools/build_identity.json +8 -2
  5. {bantamkit-0.35.9 → bantamkit-0.36.1}/_assets/tools/memory_compact.json +9 -2
  6. bantamkit-0.36.1/_assets/tools/memory_dream.json +36 -0
  7. bantamkit-0.36.1/_assets/tools/memory_recall.json +43 -0
  8. bantamkit-0.36.1/_assets/tools/memory_save.json +69 -0
  9. bantamkit-0.36.1/_assets/tools/shiftwork_clock_in.json +97 -0
  10. {bantamkit-0.35.9 → bantamkit-0.36.1}/_assets/tools/shiftwork_clock_out.json +49 -7
  11. bantamkit-0.36.1/_assets/tools/shiftwork_plan.json +77 -0
  12. bantamkit-0.36.1/_assets/tools/shiftwork_status.json +71 -0
  13. {bantamkit-0.35.9 → bantamkit-0.36.1}/_assets/tools/skill_audit.json +8 -2
  14. {bantamkit-0.35.9 → bantamkit-0.36.1}/_assets/tools/token_ledger.json +8 -2
  15. bantamkit-0.36.1/_assets/tools/validate_json.json +60 -0
  16. bantamkit-0.36.1/_assets/tools/work_plan.json +96 -0
  17. {bantamkit-0.35.9 → bantamkit-0.36.1}/pyproject.toml +11 -3
  18. {bantamkit-0.35.9 → bantamkit-0.36.1}/src/bantamkit/__init__.py +1 -1
  19. {bantamkit-0.35.9 → bantamkit-0.36.1}/src/bantamkit/hookadapter.py +33 -0
  20. {bantamkit-0.35.9 → bantamkit-0.36.1}/src/bantamkit/mcpreport.py +4 -1
  21. {bantamkit-0.35.9 → bantamkit-0.36.1}/src/bantamkit/mcpserver.py +65 -1
  22. {bantamkit-0.35.9 → bantamkit-0.36.1}/src/bantamkit/memory/component.py +17 -6
  23. {bantamkit-0.35.9 → bantamkit-0.36.1}/src/bantamkit/memory/store.py +47 -18
  24. {bantamkit-0.35.9 → bantamkit-0.36.1}/src/bantamkit/shiftwork.py +4 -2
  25. {bantamkit-0.35.9 → bantamkit-0.36.1}/src/bantamkit/statusline.py +38 -4
  26. bantamkit-0.36.1/tests/data/served-tool-surface.json +915 -0
  27. {bantamkit-0.35.9 → bantamkit-0.36.1}/tests/test_conformance.py +8 -1
  28. {bantamkit-0.35.9 → bantamkit-0.36.1}/tests/test_hookadapter.py +71 -0
  29. {bantamkit-0.35.9 → bantamkit-0.36.1}/tests/test_memory.py +45 -2
  30. {bantamkit-0.35.9 → bantamkit-0.36.1}/tests/test_statusline.py +54 -1
  31. bantamkit-0.36.1/tests/test_tool_annotations.py +176 -0
  32. {bantamkit-0.35.9 → bantamkit-0.36.1}/tests/test_tool_manifest.py +18 -1
  33. bantamkit-0.36.1/tests/test_unknown_arguments.py +110 -0
  34. bantamkit-0.35.9/_assets/tools/memory_dream.json +0 -20
  35. bantamkit-0.35.9/_assets/tools/memory_recall.json +0 -37
  36. bantamkit-0.35.9/_assets/tools/memory_save.json +0 -61
  37. bantamkit-0.35.9/_assets/tools/shiftwork_clock_in.json +0 -37
  38. bantamkit-0.35.9/_assets/tools/shiftwork_plan.json +0 -25
  39. bantamkit-0.35.9/_assets/tools/shiftwork_status.json +0 -25
  40. bantamkit-0.35.9/_assets/tools/validate_json.json +0 -31
  41. bantamkit-0.35.9/_assets/tools/work_plan.json +0 -55
  42. bantamkit-0.35.9/tests/data/served-tool-surface.json +0 -593
  43. {bantamkit-0.35.9 → bantamkit-0.36.1}/.gitignore +0 -0
  44. {bantamkit-0.35.9 → bantamkit-0.36.1}/_assets/contracts/default.yaml +0 -0
  45. {bantamkit-0.35.9 → bantamkit-0.36.1}/_assets/evals/devteam/manifest.yaml +0 -0
  46. {bantamkit-0.35.9 → bantamkit-0.36.1}/_assets/evals/devteam/repo/HISTORY.md +0 -0
  47. {bantamkit-0.35.9 → bantamkit-0.36.1}/_assets/evals/devteam/repo/README.md +0 -0
  48. {bantamkit-0.35.9 → bantamkit-0.36.1}/_assets/evals/devteam/repo/docs/architecture.md +0 -0
  49. {bantamkit-0.35.9 → bantamkit-0.36.1}/_assets/evals/devteam/repo/docs/runbook.md +0 -0
  50. {bantamkit-0.35.9 → bantamkit-0.36.1}/_assets/evals/devteam/repo/issues/142-settlement-timeout.md +0 -0
  51. {bantamkit-0.35.9 → bantamkit-0.36.1}/_assets/evals/devteam/repo/patches/0009-retry-budget.patch +0 -0
  52. {bantamkit-0.35.9 → bantamkit-0.36.1}/_assets/evals/devteam/repo/src/ledger/__init__.py +0 -0
  53. {bantamkit-0.35.9 → bantamkit-0.36.1}/_assets/evals/devteam/repo/src/ledger/config.py +0 -0
  54. {bantamkit-0.35.9 → bantamkit-0.36.1}/_assets/evals/devteam/repo/src/ledger/errors.py +0 -0
  55. {bantamkit-0.35.9 → bantamkit-0.36.1}/_assets/evals/devteam/repo/src/ledger/posting.py +0 -0
  56. {bantamkit-0.35.9 → bantamkit-0.36.1}/_assets/evals/devteam/repo/src/ledger/registry.py +0 -0
  57. {bantamkit-0.35.9 → bantamkit-0.36.1}/_assets/evals/devteam/repo/src/ledger/report.py +0 -0
  58. {bantamkit-0.35.9 → bantamkit-0.36.1}/_assets/evals/devteam/repo/src/ledger/retry.py +0 -0
  59. {bantamkit-0.35.9 → bantamkit-0.36.1}/_assets/evals/devteam/repo/src/ledger/settle.py +0 -0
  60. {bantamkit-0.35.9 → bantamkit-0.36.1}/_assets/evals/devteam/repo/src/ledger/validate.py +0 -0
  61. {bantamkit-0.35.9 → bantamkit-0.36.1}/_assets/evals/devteam/repo/tests/test_posting.py +0 -0
  62. {bantamkit-0.35.9 → bantamkit-0.36.1}/_assets/evals/devteam/repo/tests/test_settle.py +0 -0
  63. {bantamkit-0.35.9 → bantamkit-0.36.1}/_assets/evals/devteam/tasks/dt-error-contract.yaml +0 -0
  64. {bantamkit-0.35.9 → bantamkit-0.36.1}/_assets/evals/devteam/tasks/dt-handler-map.yaml +0 -0
  65. {bantamkit-0.35.9 → bantamkit-0.36.1}/_assets/evals/devteam/tasks/dt-patch-before-after.yaml +0 -0
  66. {bantamkit-0.35.9 → bantamkit-0.36.1}/_assets/evals/devteam/tasks/dt-retry-attempts.yaml +0 -0
  67. {bantamkit-0.35.9 → bantamkit-0.36.1}/_assets/evals/devteam/tasks/dt-settlement-config.yaml +0 -0
  68. {bantamkit-0.35.9 → bantamkit-0.36.1}/_assets/evals/devteam/tasks/dt-symbol-home.yaml +0 -0
  69. {bantamkit-0.35.9 → bantamkit-0.36.1}/_assets/evals/devteam/tasks/dt-trace-blame.yaml +0 -0
  70. {bantamkit-0.35.9 → bantamkit-0.36.1}/_assets/evals/devteam/tasks/dt-unread-key.yaml +0 -0
  71. {bantamkit-0.35.9 → bantamkit-0.36.1}/_assets/evals/document/tasks/doc-large-in-137.yaml +0 -0
  72. {bantamkit-0.35.9 → bantamkit-0.36.1}/_assets/evals/document/tasks/doc-large-in-359.yaml +0 -0
  73. {bantamkit-0.35.9 → bantamkit-0.36.1}/_assets/evals/document/tasks/doc-large-in-372.yaml +0 -0
  74. {bantamkit-0.35.9 → bantamkit-0.36.1}/_assets/evals/document/tasks/doc-large-out-11764.yaml +0 -0
  75. {bantamkit-0.35.9 → bantamkit-0.36.1}/_assets/evals/document/tasks/doc-large-out-4137.yaml +0 -0
  76. {bantamkit-0.35.9 → bantamkit-0.36.1}/_assets/evals/document/tasks/doc-large-out-8022.yaml +0 -0
  77. {bantamkit-0.35.9 → bantamkit-0.36.1}/_assets/evals/document/tasks/doc-small-137.yaml +0 -0
  78. {bantamkit-0.35.9 → bantamkit-0.36.1}/_assets/evals/document/tasks/doc-small-261.yaml +0 -0
  79. {bantamkit-0.35.9 → bantamkit-0.36.1}/_assets/evals/document/tasks/doc-small-388.yaml +0 -0
  80. {bantamkit-0.35.9 → bantamkit-0.36.1}/_assets/evals/fixtures/.gitkeep +0 -0
  81. {bantamkit-0.35.9 → bantamkit-0.36.1}/_assets/evals/fixtures/catalog.json +0 -0
  82. {bantamkit-0.35.9 → bantamkit-0.36.1}/_assets/evals/perturbations/task-completion.yaml +0 -0
  83. {bantamkit-0.35.9 → bantamkit-0.36.1}/_assets/evals/tasks/.gitkeep +0 -0
  84. {bantamkit-0.35.9 → bantamkit-0.36.1}/_assets/evals/tasks/extract-contact.yaml +0 -0
  85. {bantamkit-0.35.9 → bantamkit-0.36.1}/_assets/evals/tasks/extract-invoice.yaml +0 -0
  86. {bantamkit-0.35.9 → bantamkit-0.36.1}/_assets/evals/tasks/extract-order.yaml +0 -0
  87. {bantamkit-0.35.9 → bantamkit-0.36.1}/_assets/evals/tasks/extract-schedule.yaml +0 -0
  88. {bantamkit-0.35.9 → bantamkit-0.36.1}/_assets/evals/tasks/extract-versions.yaml +0 -0
  89. {bantamkit-0.35.9 → bantamkit-0.36.1}/_assets/evals/tasks/nav-prod-port.yaml +0 -0
  90. {bantamkit-0.35.9 → bantamkit-0.36.1}/_assets/evals/tasks/nav-release-bundle.yaml +0 -0
  91. {bantamkit-0.35.9 → bantamkit-0.36.1}/_assets/evals/tasks/recall-audit-retention.yaml +0 -0
  92. {bantamkit-0.35.9 → bantamkit-0.36.1}/_assets/evals/tasks/recall-cache-ttl.yaml +0 -0
  93. {bantamkit-0.35.9 → bantamkit-0.36.1}/_assets/evals/tasks/recall-db-port.yaml +0 -0
  94. {bantamkit-0.35.9 → bantamkit-0.36.1}/_assets/evals/tasks/recall-deploy.yaml +0 -0
  95. {bantamkit-0.35.9 → bantamkit-0.36.1}/_assets/evals/tasks/recall-env-endpoint.yaml +0 -0
  96. {bantamkit-0.35.9 → bantamkit-0.36.1}/_assets/evals/tasks/recall-oncall-rotation.yaml +0 -0
  97. {bantamkit-0.35.9 → bantamkit-0.36.1}/_assets/evals/tasks/recall-oncall.yaml +0 -0
  98. {bantamkit-0.35.9 → bantamkit-0.36.1}/_assets/evals/tasks/recall-org-quota.yaml +0 -0
  99. {bantamkit-0.35.9 → bantamkit-0.36.1}/_assets/evals/tasks/recall-owner.yaml +0 -0
  100. {bantamkit-0.35.9 → bantamkit-0.36.1}/_assets/evals/tasks/shop-basket-total.yaml +0 -0
  101. {bantamkit-0.35.9 → bantamkit-0.36.1}/_assets/evals/tasks/shop-cheapest.yaml +0 -0
  102. {bantamkit-0.35.9 → bantamkit-0.36.1}/_assets/evals/tasks/shop-compare.yaml +0 -0
  103. {bantamkit-0.35.9 → bantamkit-0.36.1}/_assets/evals/tasks/shop-gadget-value.yaml +0 -0
  104. {bantamkit-0.35.9 → bantamkit-0.36.1}/_assets/evals/tasks/shop-stock-total.yaml +0 -0
  105. {bantamkit-0.35.9 → bantamkit-0.36.1}/_assets/evals/tasks/shop-total.yaml +0 -0
  106. {bantamkit-0.35.9 → bantamkit-0.36.1}/_assets/pricing/default.json +0 -0
  107. {bantamkit-0.35.9 → bantamkit-0.36.1}/_assets/profiles/default.yaml +0 -0
  108. {bantamkit-0.35.9 → bantamkit-0.36.1}/_assets/profiles/patient.yaml +0 -0
  109. {bantamkit-0.35.9 → bantamkit-0.36.1}/_assets/rubrics/.gitkeep +0 -0
  110. {bantamkit-0.35.9 → bantamkit-0.36.1}/_assets/rubrics/code-quality.yaml +0 -0
  111. {bantamkit-0.35.9 → bantamkit-0.36.1}/_assets/rubrics/grounded-completion.yaml +0 -0
  112. {bantamkit-0.35.9 → bantamkit-0.36.1}/_assets/rubrics/task-completion.yaml +0 -0
  113. {bantamkit-0.35.9 → bantamkit-0.36.1}/_assets/schemas/shiftwork-checkpoint.json +0 -0
  114. {bantamkit-0.35.9 → bantamkit-0.36.1}/_assets/skills/.gitkeep +0 -0
  115. {bantamkit-0.35.9 → bantamkit-0.36.1}/_assets/skills/file-graph.md +0 -0
  116. {bantamkit-0.35.9 → bantamkit-0.36.1}/_assets/skills/memory.md +0 -0
  117. {bantamkit-0.35.9 → bantamkit-0.36.1}/_assets/tools/.gitkeep +0 -0
  118. {bantamkit-0.35.9 → bantamkit-0.36.1}/_assets/tools/bantamkit_read.json +0 -0
  119. {bantamkit-0.35.9 → bantamkit-0.36.1}/_assets/tools/document_list.json +0 -0
  120. {bantamkit-0.35.9 → bantamkit-0.36.1}/_assets/tools/document_read.json +0 -0
  121. {bantamkit-0.35.9 → bantamkit-0.36.1}/_assets/tools/file_graph.json +0 -0
  122. {bantamkit-0.35.9 → bantamkit-0.36.1}/_assets/tools/repo_map.json +0 -0
  123. {bantamkit-0.35.9 → bantamkit-0.36.1}/hatch_build.py +0 -0
  124. {bantamkit-0.35.9 → bantamkit-0.36.1}/src/bantamkit/agent.py +0 -0
  125. {bantamkit-0.35.9 → bantamkit-0.36.1}/src/bantamkit/assets.py +0 -0
  126. {bantamkit-0.35.9 → bantamkit-0.36.1}/src/bantamkit/budget.py +0 -0
  127. {bantamkit-0.35.9 → bantamkit-0.36.1}/src/bantamkit/client.py +0 -0
  128. {bantamkit-0.35.9 → bantamkit-0.36.1}/src/bantamkit/contract.py +0 -0
  129. {bantamkit-0.35.9 → bantamkit-0.36.1}/src/bantamkit/criticreplay.py +0 -0
  130. {bantamkit-0.35.9 → bantamkit-0.36.1}/src/bantamkit/critique.py +0 -0
  131. {bantamkit-0.35.9 → bantamkit-0.36.1}/src/bantamkit/docmanifest.py +0 -0
  132. {bantamkit-0.35.9 → bantamkit-0.36.1}/src/bantamkit/docread.py +0 -0
  133. {bantamkit-0.35.9 → bantamkit-0.36.1}/src/bantamkit/evalrun.py +0 -0
  134. {bantamkit-0.35.9 → bantamkit-0.36.1}/src/bantamkit/eventlog.py +0 -0
  135. {bantamkit-0.35.9 → bantamkit-0.36.1}/src/bantamkit/filegraph.py +0 -0
  136. {bantamkit-0.35.9 → bantamkit-0.36.1}/src/bantamkit/hostinstall.py +0 -0
  137. {bantamkit-0.35.9 → bantamkit-0.36.1}/src/bantamkit/loopguard.py +0 -0
  138. {bantamkit-0.35.9 → bantamkit-0.36.1}/src/bantamkit/mcpstdio.py +0 -0
  139. {bantamkit-0.35.9 → bantamkit-0.36.1}/src/bantamkit/memory/__init__.py +0 -0
  140. {bantamkit-0.35.9 → bantamkit-0.36.1}/src/bantamkit/memory/__main__.py +0 -0
  141. {bantamkit-0.35.9 → bantamkit-0.36.1}/src/bantamkit/memory/divergence.py +0 -0
  142. {bantamkit-0.35.9 → bantamkit-0.36.1}/src/bantamkit/memory/dream.py +0 -0
  143. {bantamkit-0.35.9 → bantamkit-0.36.1}/src/bantamkit/memory/layers.py +0 -0
  144. {bantamkit-0.35.9 → bantamkit-0.36.1}/src/bantamkit/pdfread.py +0 -0
  145. {bantamkit-0.35.9 → bantamkit-0.36.1}/src/bantamkit/pricing.py +0 -0
  146. {bantamkit-0.35.9 → bantamkit-0.36.1}/src/bantamkit/profile.py +0 -0
  147. {bantamkit-0.35.9 → bantamkit-0.36.1}/src/bantamkit/repomap.py +0 -0
  148. {bantamkit-0.35.9 → bantamkit-0.36.1}/src/bantamkit/selfupdate.py +0 -0
  149. {bantamkit-0.35.9 → bantamkit-0.36.1}/src/bantamkit/skillaudit.py +0 -0
  150. {bantamkit-0.35.9 → bantamkit-0.36.1}/src/bantamkit/structured.py +0 -0
  151. {bantamkit-0.35.9 → bantamkit-0.36.1}/src/bantamkit/textutil.py +0 -0
  152. {bantamkit-0.35.9 → bantamkit-0.36.1}/src/bantamkit/tokenledger.py +0 -0
  153. {bantamkit-0.35.9 → bantamkit-0.36.1}/src/bantamkit/updatecheck.py +0 -0
  154. {bantamkit-0.35.9 → bantamkit-0.36.1}/src/bantamkit/workplan.py +0 -0
  155. {bantamkit-0.35.9 → bantamkit-0.36.1}/tests/cli_exit_status_probe.py +0 -0
  156. {bantamkit-0.35.9 → bantamkit-0.36.1}/tests/conftest.py +0 -0
  157. {bantamkit-0.35.9 → bantamkit-0.36.1}/tests/data/docread/bad-crc.docx +0 -0
  158. {bantamkit-0.35.9 → bantamkit-0.36.1}/tests/data/docread/charref-4301-digits.html +0 -0
  159. {bantamkit-0.35.9 → bantamkit-0.36.1}/tests/data/docread/charset-table.json +0 -0
  160. {bantamkit-0.35.9 → bantamkit-0.36.1}/tests/data/docread/compression-method-9.docx +0 -0
  161. {bantamkit-0.35.9 → bantamkit-0.36.1}/tests/data/docread/corrupt-deflate.docx +0 -0
  162. {bantamkit-0.35.9 → bantamkit-0.36.1}/tests/data/docread/encrypted-member.docx +0 -0
  163. {bantamkit-0.35.9 → bantamkit-0.36.1}/tests/data/docread/encrypted-mimetype.odt +0 -0
  164. {bantamkit-0.35.9 → bantamkit-0.36.1}/tests/data/docread/eszett-cell-ref.xlsx +0 -0
  165. {bantamkit-0.35.9 → bantamkit-0.36.1}/tests/data/docread/internal-dtd-entity.docx +0 -0
  166. {bantamkit-0.35.9 → bantamkit-0.36.1}/tests/data/docread/rfc2231-charset.eml +0 -0
  167. {bantamkit-0.35.9 → bantamkit-0.36.1}/tests/data/docread/rfc822-nested-twice.eml +0 -0
  168. {bantamkit-0.35.9 → bantamkit-0.36.1}/tests/data/docread/unicode-digit-shared-string.xlsx +0 -0
  169. {bantamkit-0.35.9 → bantamkit-0.36.1}/tests/data/docread/x-uuencode.eml +0 -0
  170. {bantamkit-0.35.9 → bantamkit-0.36.1}/tests/data/f8404ab-perturbation-baseline.json +0 -0
  171. {bantamkit-0.35.9 → bantamkit-0.36.1}/tests/data/platform-assumption-baseline.json +0 -0
  172. {bantamkit-0.35.9 → bantamkit-0.36.1}/tests/docread_fixtures.py +0 -0
  173. {bantamkit-0.35.9 → bantamkit-0.36.1}/tests/perturbation_baseline_harness.py +0 -0
  174. {bantamkit-0.35.9 → bantamkit-0.36.1}/tests/rbp16_effect_probe.py +0 -0
  175. {bantamkit-0.35.9 → bantamkit-0.36.1}/tests/rbp18_payload_probe.py +0 -0
  176. {bantamkit-0.35.9 → bantamkit-0.36.1}/tests/test_adapter.py +0 -0
  177. {bantamkit-0.35.9 → bantamkit-0.36.1}/tests/test_agent.py +0 -0
  178. {bantamkit-0.35.9 → bantamkit-0.36.1}/tests/test_amendguard.py +0 -0
  179. {bantamkit-0.35.9 → bantamkit-0.36.1}/tests/test_assets.py +0 -0
  180. {bantamkit-0.35.9 → bantamkit-0.36.1}/tests/test_bantamkit_gitignore.py +0 -0
  181. {bantamkit-0.35.9 → bantamkit-0.36.1}/tests/test_bantamkit_read_tool.py +0 -0
  182. {bantamkit-0.35.9 → bantamkit-0.36.1}/tests/test_budget.py +0 -0
  183. {bantamkit-0.35.9 → bantamkit-0.36.1}/tests/test_build_identity.py +0 -0
  184. {bantamkit-0.35.9 → bantamkit-0.36.1}/tests/test_cli_oneshot.py +0 -0
  185. {bantamkit-0.35.9 → bantamkit-0.36.1}/tests/test_client.py +0 -0
  186. {bantamkit-0.35.9 → bantamkit-0.36.1}/tests/test_compaction_corpus_survey.py +0 -0
  187. {bantamkit-0.35.9 → bantamkit-0.36.1}/tests/test_conformance_harness_resilience.py +0 -0
  188. {bantamkit-0.35.9 → bantamkit-0.36.1}/tests/test_conformance_suite_table_gate.py +0 -0
  189. {bantamkit-0.35.9 → bantamkit-0.36.1}/tests/test_contract_fanout.py +0 -0
  190. {bantamkit-0.35.9 → bantamkit-0.36.1}/tests/test_contract_patterns.py +0 -0
  191. {bantamkit-0.35.9 → bantamkit-0.36.1}/tests/test_contract_refs.py +0 -0
  192. {bantamkit-0.35.9 → bantamkit-0.36.1}/tests/test_criticreplay.py +0 -0
  193. {bantamkit-0.35.9 → bantamkit-0.36.1}/tests/test_critique.py +0 -0
  194. {bantamkit-0.35.9 → bantamkit-0.36.1}/tests/test_doc_commands_gate.py +0 -0
  195. {bantamkit-0.35.9 → bantamkit-0.36.1}/tests/test_docread.py +0 -0
  196. {bantamkit-0.35.9 → bantamkit-0.36.1}/tests/test_docread_ceilings.py +0 -0
  197. {bantamkit-0.35.9 → bantamkit-0.36.1}/tests/test_document_manifest_parity.py +0 -0
  198. {bantamkit-0.35.9 → bantamkit-0.36.1}/tests/test_document_setup.py +0 -0
  199. {bantamkit-0.35.9 → bantamkit-0.36.1}/tests/test_document_tasks.py +0 -0
  200. {bantamkit-0.35.9 → bantamkit-0.36.1}/tests/test_document_tools.py +0 -0
  201. {bantamkit-0.35.9 → bantamkit-0.36.1}/tests/test_encoding_gate.py +0 -0
  202. {bantamkit-0.35.9 → bantamkit-0.36.1}/tests/test_evalrun.py +0 -0
  203. {bantamkit-0.35.9 → bantamkit-0.36.1}/tests/test_eventlog.py +0 -0
  204. {bantamkit-0.35.9 → bantamkit-0.36.1}/tests/test_field_program_gates.py +0 -0
  205. {bantamkit-0.35.9 → bantamkit-0.36.1}/tests/test_field_programs.py +0 -0
  206. {bantamkit-0.35.9 → bantamkit-0.36.1}/tests/test_filegraph.py +0 -0
  207. {bantamkit-0.35.9 → bantamkit-0.36.1}/tests/test_hostinstall.py +0 -0
  208. {bantamkit-0.35.9 → bantamkit-0.36.1}/tests/test_hostinstall_hooks.py +0 -0
  209. {bantamkit-0.35.9 → bantamkit-0.36.1}/tests/test_install_shape.py +0 -0
  210. {bantamkit-0.35.9 → bantamkit-0.36.1}/tests/test_ladder_statistics.py +0 -0
  211. {bantamkit-0.35.9 → bantamkit-0.36.1}/tests/test_launcher_which.py +0 -0
  212. {bantamkit-0.35.9 → bantamkit-0.36.1}/tests/test_layers.py +0 -0
  213. {bantamkit-0.35.9 → bantamkit-0.36.1}/tests/test_loopguard.py +0 -0
  214. {bantamkit-0.35.9 → bantamkit-0.36.1}/tests/test_mcp_endpoint.py +0 -0
  215. {bantamkit-0.35.9 → bantamkit-0.36.1}/tests/test_mcp_request_guard.py +0 -0
  216. {bantamkit-0.35.9 → bantamkit-0.36.1}/tests/test_mcpdrift.py +0 -0
  217. {bantamkit-0.35.9 → bantamkit-0.36.1}/tests/test_mcpreport.py +0 -0
  218. {bantamkit-0.35.9 → bantamkit-0.36.1}/tests/test_mcpserver.py +0 -0
  219. {bantamkit-0.35.9 → bantamkit-0.36.1}/tests/test_mcpstdio_frames.py +0 -0
  220. {bantamkit-0.35.9 → bantamkit-0.36.1}/tests/test_memory_compact_tool.py +0 -0
  221. {bantamkit-0.35.9 → bantamkit-0.36.1}/tests/test_memory_component.py +0 -0
  222. {bantamkit-0.35.9 → bantamkit-0.36.1}/tests/test_memory_divergence.py +0 -0
  223. {bantamkit-0.35.9 → bantamkit-0.36.1}/tests/test_memory_dream.py +0 -0
  224. {bantamkit-0.35.9 → bantamkit-0.36.1}/tests/test_memory_layers.py +0 -0
  225. {bantamkit-0.35.9 → bantamkit-0.36.1}/tests/test_memory_store_tripwire.py +0 -0
  226. {bantamkit-0.35.9 → bantamkit-0.36.1}/tests/test_memory_strings.py +0 -0
  227. {bantamkit-0.35.9 → bantamkit-0.36.1}/tests/test_mutmatrix.py +0 -0
  228. {bantamkit-0.35.9 → bantamkit-0.36.1}/tests/test_nativeexport.py +0 -0
  229. {bantamkit-0.35.9 → bantamkit-0.36.1}/tests/test_newline_gate.py +0 -0
  230. {bantamkit-0.35.9 → bantamkit-0.36.1}/tests/test_packaging.py +0 -0
  231. {bantamkit-0.35.9 → bantamkit-0.36.1}/tests/test_pdfread.py +0 -0
  232. {bantamkit-0.35.9 → bantamkit-0.36.1}/tests/test_pinharness_ledger.py +0 -0
  233. {bantamkit-0.35.9 → bantamkit-0.36.1}/tests/test_platform_assumption_gate.py +0 -0
  234. {bantamkit-0.35.9 → bantamkit-0.36.1}/tests/test_pricing.py +0 -0
  235. {bantamkit-0.35.9 → bantamkit-0.36.1}/tests/test_readme_separation.py +0 -0
  236. {bantamkit-0.35.9 → bantamkit-0.36.1}/tests/test_repo_map_tool.py +0 -0
  237. {bantamkit-0.35.9 → bantamkit-0.36.1}/tests/test_repomap.py +0 -0
  238. {bantamkit-0.35.9 → bantamkit-0.36.1}/tests/test_selfupdate.py +0 -0
  239. {bantamkit-0.35.9 → bantamkit-0.36.1}/tests/test_served_tool_count_records.py +0 -0
  240. {bantamkit-0.35.9 → bantamkit-0.36.1}/tests/test_shiftwork.py +0 -0
  241. {bantamkit-0.35.9 → bantamkit-0.36.1}/tests/test_skillaudit.py +0 -0
  242. {bantamkit-0.35.9 → bantamkit-0.36.1}/tests/test_status_surface.py +0 -0
  243. {bantamkit-0.35.9 → bantamkit-0.36.1}/tests/test_structured.py +0 -0
  244. {bantamkit-0.35.9 → bantamkit-0.36.1}/tests/test_thread_exception_gate.py +0 -0
  245. {bantamkit-0.35.9 → bantamkit-0.36.1}/tests/test_tokenledger.py +0 -0
  246. {bantamkit-0.35.9 → bantamkit-0.36.1}/tests/test_updatecheck.py +0 -0
  247. {bantamkit-0.35.9 → bantamkit-0.36.1}/tests/test_version_agreement.py +0 -0
  248. {bantamkit-0.35.9 → bantamkit-0.36.1}/tests/test_workplan.py +0 -0
@@ -1,46 +1,117 @@
1
+ Metadata-Version: 2.5
2
+ Name: bantamkit
3
+ Version: 0.36.1
4
+ Summary: Persistent memory for coding agents: an MCP server for Claude Code, Claude Desktop, Cursor and VS Code Copilot, plus a Python library that lifts small-model agents. Install once, run offline.
5
+ Project-URL: Homepage, https://github.com/Ink01101011/bantamkit
6
+ Project-URL: Repository, https://github.com/Ink01101011/bantamkit
7
+ Project-URL: Issues, https://github.com/Ink01101011/bantamkit/issues
8
+ Project-URL: Documentation, https://github.com/Ink01101011/bantamkit/tree/main/docs
9
+ License-Expression: MIT
10
+ Keywords: agent,agent-memory,ai-agents,claude,claude-code,claude-code-hooks,claude-desktop,copilot,cursor,github-copilot,json-schema,llm,mcp,mcp-server,memory,model-context-protocol,persistent-memory,token-usage,vscode
11
+ Classifier: Development Status :: 4 - Beta
12
+ Classifier: Environment :: Console
13
+ Classifier: Intended Audience :: Developers
14
+ Classifier: Programming Language :: Python :: 3 :: Only
15
+ Classifier: Programming Language :: Python :: 3.11
16
+ Classifier: Programming Language :: Python :: 3.12
17
+ Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
18
+ Classifier: Topic :: Software Development :: Libraries :: Python Modules
19
+ Requires-Python: >=3.11
20
+ Requires-Dist: httpx>=0.27
21
+ Requires-Dist: jsonschema>=4.21
22
+ Requires-Dist: pyyaml>=6.0
23
+ Provides-Extra: dev
24
+ Requires-Dist: build>=1.0; extra == 'dev'
25
+ Requires-Dist: hatchling>=1.24; extra == 'dev'
26
+ Requires-Dist: pytest>=8.0; extra == 'dev'
27
+ Requires-Dist: ruff>=0.4; extra == 'dev'
28
+ Provides-Extra: mcp
29
+ Requires-Dist: mcp<2.1,>=2.0; extra == 'mcp'
30
+ Description-Content-Type: text/markdown
31
+
1
32
  # bantamkit — memory MCP server for Claude Code, Cursor, VS Code Copilot and Claude Desktop (Python)
2
33
 
3
- **bantamkit** is a Python **MCP server** on **PyPI** that gives coding agents a per-person
4
- **memory** store, JSON Schema validation, shift-work accounting, a token ledger and a
5
- skill-catalogue auditor. It works with **Claude Code**, **Claude Desktop**, **Cursor**, **GitHub
6
- Copilot in VS Code** and any stdio MCP client. Install it with `pip install "bantamkit[mcp]"`;
7
- after one install it starts **offline**.
34
+ [![npm version](https://img.shields.io/npm/v/bantamkit-mcp?logo=npm&label=npm)](https://www.npmjs.com/package/bantamkit-mcp)
35
+ [![PyPI version](https://img.shields.io/pypi/v/bantamkit?logo=pypi&logoColor=white&label=PyPI)](https://pypi.org/project/bantamkit/)
36
+ [![Python versions](https://img.shields.io/pypi/pyversions/bantamkit?logo=python&logoColor=white)](https://pypi.org/project/bantamkit/)
37
+ [![Node version](https://img.shields.io/node/v/bantamkit-mcp?logo=node.js&logoColor=white)](https://www.npmjs.com/package/bantamkit-mcp)
38
+ [![License: MIT](https://img.shields.io/github/license/Ink01101011/bantamkit)](https://github.com/Ink01101011/bantamkit/blob/main/LICENSE)
39
+ [![npm downloads](https://img.shields.io/npm/dm/bantamkit-mcp?label=npm%20downloads)](https://npm-stat.com/charts.html?package=bantamkit-mcp)
40
+ [![PyPI downloads](https://img.shields.io/pypi/dm/bantamkit?label=PyPI%20downloads)](https://pypistats.org/packages/bantamkit)
41
+
42
+ **Give your coding agent a memory that outlasts the session.** bantamkit is a Python MCP server:
43
+ the agent saves what is worth keeping — a preference you stated, a decision, the fix that worked
44
+ — and recalls it next session instead of asking you again. It works with **Claude Code**,
45
+ **Claude Desktop**, **Cursor**, **GitHub Copilot in VS Code** and any stdio MCP client. Install it
46
+ with `pip install "bantamkit[mcp]"`; after one install it starts **offline**.
8
47
 
9
- The same server in pure Node is on **npm** as
10
- [`bantamkit-mcp`](https://www.npmjs.com/package/bantamkit-mcp). The two share a memory store on
11
- disk and a conformance suite holds them to the same answers, so install whichever your host makes
12
- easy.
48
+ **This page is the PyPI package's.** Every command on it runs `bantamkit` from PyPI. The same
49
+ server in pure Node is on npm as [`bantamkit-mcp`](https://www.npmjs.com/package/bantamkit-mcp);
50
+ it is named where the two differ, but its own install, update and CLI commands live on its page;
51
+ run them here and you get nothing.
13
52
 
14
- **This page is the PyPI package's.** Every command on it runs `bantamkit` from PyPI. The npm
15
- package is named where the two differ, but its own install, update and CLI commands live on
16
- [its page](https://www.npmjs.com/package/bantamkit-mcp); run them here and you get nothing.
53
+ ## 🚀 Quick start
54
+
55
+ ```bash
56
+ python -m venv <env>
57
+ <env>/bin/pip install "bantamkit[mcp]"
58
+ <env>/bin/bantamkit-mcp --install claude # or claude-desktop, copilot, cursor
59
+ ```
17
60
 
18
- ## Contents
61
+ Then restart the host (in Claude Code, open a new session) and ask the agent to call
62
+ `bantamkit_status`. Every route and host is below.
63
+
64
+ ## ✨ What you get
65
+
66
+ - **Memory that persists.** Facts are plain Markdown files under `.bantamkit/memory`, deduped
67
+ and held to a byte budget. `memory_save` and `memory_recall` do the work; `memory_compact` and
68
+ `memory_dream` keep the store tidy.
69
+ - **Layered by default.** Recall reads the project store, any stores you grant in
70
+ `.bantamkit/config.yaml`, and your profile store `~/.bantamkit/memory`. Saves go to the
71
+ project store.
72
+ - **One command per host.** `--install` writes the entry for Claude Code, Claude Desktop, Cursor
73
+ or VS Code Copilot, backs up any file it edits, and never prompts.
74
+ - **Offline after one install.** `--install` records the venv's console script by absolute path,
75
+ so no launch needs the network or your shell's PATH.
76
+ - **Claude Code hooks, if you want them.** `--install-hooks` puts the memory index in front of
77
+ each new session, surfaces matching facts on each prompt, and nudges a save at the end of a
78
+ long session that saved nothing
79
+ ([docs/hooks.md](https://github.com/Ink01101011/bantamkit/blob/main/docs/hooks.md)).
80
+ - **More than memory.** JSON Schema validation, a token ledger read off the host's transcripts,
81
+ a skill-catalogue audit, and shift-work tools that plan and hand off multi-step jobs —
82
+ [the fourteen tools](#-what-it-serves).
83
+ - **Same answers as the Node server.** The two share a memory store on disk, and every surface
84
+ is compared between both runtimes by a conformance suite (`node tools/conformance/run.mjs
85
+ --all` in the repository), so install whichever your host makes easy.
86
+ - **A Python library for small models, too.** `import bantamkit` lifts small-model agents
87
+ (~1B–8B, any OpenAI-compatible endpoint) — see [Module API](#-module-api).
88
+
89
+ ## 📑 Contents
19
90
 
20
91
  | Topic | What you'll find |
21
92
  |---|---|
22
- | [Install the MCP server](#install-the-mcp-server) | Try it; the `[mcp]` extra |
93
+ | [Install the MCP server](#-install-the-mcp-server) | Try it; the `[mcp]` extra |
23
94
  | [Install once, run offline](#install-once-run-offline) | A kept venv, or a wheelhouse |
24
95
  | [Run with pipx at every launch](#run-with-pipx-at-every-launch) | The online form |
25
- | [Connect it to a host](#connect-it-to-a-host) | The same five steps per host |
96
+ | [Connect it to a host](#-connect-it-to-a-host) | The same five steps per host |
26
97
  | [Connect to Claude Code](#connect-to-claude-code) | `--install claude`, `claude mcp remove` |
27
98
  | [Connect to Claude Desktop](#connect-to-claude-desktop) | `claude_desktop_config.json` per OS |
28
99
  | [Connect to Cursor](#connect-to-cursor) | `~/.cursor/mcp.json` |
29
100
  | [Connect to VS Code (GitHub Copilot)](#connect-to-vs-code-github-copilot) | `mcp.json`, `servers` key |
30
101
  | [Connect other MCP clients](#connect-other-mcp-clients) | Any stdio host |
31
- | [Configuration](#configuration) | Every flag and variable, with its default |
32
- | [Update](#update) | `--update`, pipx, uv, then restart |
33
- | [Troubleshooting](#troubleshooting) | Timeouts, refusals, the wrong store |
34
- | [What it serves](#what-it-serves) | 14 tools, one prompt, two resource templates |
35
- | [Requirements](#requirements) | Python and dependencies |
36
- | [The asset pack](#the-asset-pack) | `--assets-root`, `BANTAMKIT_ASSETS` |
37
- | [The operator CLI: `python -m bantamkit.memory`](#the-operator-cli-python--m-bantamkitmemory) | status, lint, compact, archived, archive, restore |
38
- | [Where the Python and Node servers differ](#where-the-python-and-node-servers-differ) | One store; pdf/.doc/.rtf, CLI name, `build_id` |
39
- | [Module API](#module-api) | `import bantamkit`: the library half, measured from the wheel |
40
- | [Development](#development) | Clone, test, lint, conformance |
41
- | [Documentation](#documentation) | The full docs on GitHub |
42
-
43
- ## Install the MCP server
102
+ | [Configuration](#-configuration) | Every flag and variable, with its default |
103
+ | [Update](#-update) | `--update`, pipx, uv, then restart |
104
+ | [Troubleshooting](#-troubleshooting) | Timeouts, refusals, the wrong store |
105
+ | [What it serves](#-what-it-serves) | 14 tools, one prompt, two resource templates |
106
+ | [Requirements](#-requirements) | Python and dependencies |
107
+ | [The asset pack](#-the-asset-pack) | `--assets-root`, `BANTAMKIT_ASSETS` |
108
+ | [The operator CLI: `python -m bantamkit.memory`](#-the-operator-cli-python--m-bantamkitmemory) | status, lint, compact, archived, archive, restore |
109
+ | [Where the Python and Node servers differ](#-where-the-python-and-node-servers-differ) | One store; pdf/.doc/.rtf, CLI name, `build_id`, YAML only PyYAML reads |
110
+ | [Module API](#-module-api) | `import bantamkit`: the library half, measured from the wheel |
111
+ | [Development](#-development) | Clone, test, lint, conformance |
112
+ | [Documentation](#-documentation) | The full docs on GitHub |
113
+
114
+ ## 📥 Install the MCP server
44
115
 
45
116
  To try it:
46
117
 
@@ -65,18 +136,17 @@ python -m venv <env>
65
136
  ```
66
137
 
67
138
  `--install` records the venv's console script by absolute path with `"args": []`, so no launch
68
- needs the network or your shell's PATH. Measured on macOS arm64 (served-tools: dated — the
69
- surface was twelve then), it served 12 tools under a GUI
70
- app's PATH, `/usr/bin:/bin:/usr/sbin:/sbin`; the Windows layout (`<env>\Scripts\`) was not.
139
+ needs the network or your shell's PATH. Measured on macOS arm64, it served under a GUI app's
140
+ PATH, `/usr/bin:/bin:/usr/sbin:/sbin`; the Windows layout (`<env>\Scripts\`) was not.
71
141
 
72
142
  **No network on the target? Carry a wheelhouse.** Download it on a machine with the **same OS,
73
143
  CPU architecture and Python minor version** (some wheels, such as `pydantic_core`, are built for
74
144
  one platform only), copy `wheels/` across, and install from it:
75
145
 
76
146
  ```bash
77
- python -m pip download "bantamkit[mcp]==0.35.9" -d wheels
147
+ python -m pip download "bantamkit[mcp]==0.36.1" -d wheels
78
148
  python -m venv <env>
79
- <env>/bin/pip install --no-index --find-links wheels "bantamkit[mcp]==0.35.9"
149
+ <env>/bin/pip install --no-index --find-links wheels "bantamkit[mcp]==0.36.1"
80
150
  <env>/bin/bantamkit-mcp --install cursor
81
151
  ```
82
152
 
@@ -94,12 +164,13 @@ exited 1 on a cold pipx home and 0 after one online run
94
164
  ([measured](https://github.com/Ink01101011/bantamkit/blob/main/docs/install.md#pipx-run-launches-online-and-is-offline-only-while-pipxs-cache-lasts)).
95
165
  For Claude Code: `claude mcp add bantamkit -s user -- pipx run --spec "bantamkit[mcp]" bantamkit-mcp`.
96
166
 
97
- ## Connect it to a host
167
+ ## 🔌 Connect it to a host
98
168
 
99
169
  `bantamkit-mcp --install <host>` (`claude`, `claude-desktop`, `copilot`, `cursor`) writes an
100
170
  entry pointing at the console script you ran. It never prompts, so it behaves the same in a
101
171
  terminal, CI or another agent. For the three JSON hosts it backs the file up as
102
- `<name>.backup-<date>`, keeps its permissions, and refuses a file that does not parse or a
172
+ `<name>.backup-<date>` (a second write the same day takes `<name>.backup-<date>.1`, never
173
+ overwriting a backup), keeps its permissions, and refuses a file that does not parse or a
103
174
  differing entry without `--force`.
104
175
 
105
176
  Every host has the same steps: **1** command, **2** file, **3** entry, **4** confirm, **5** undo
@@ -193,7 +264,7 @@ Any stdio MCP host runs the same `command`/`args` and talks JSON-RPC on stdin an
193
264
  here is host-specific. Codex and a generic JSON config:
194
265
  [docs/mcp.md → Client setup](https://github.com/Ink01101011/bantamkit/blob/main/docs/mcp.md#client-setup).
195
266
 
196
- ## Configuration
267
+ ## 🔧 Configuration
197
268
 
198
269
  Flags go in the entry's `args`; environment variables in its `env` block (or
199
270
  `claude mcp add -e NAME=value`). Both runtimes print the same `--help`.
@@ -213,23 +284,26 @@ Flags go in the entry's `args`; environment variables in its `env` block (or
213
284
 
214
285
  Don't add `--store` by reflex: the default is layered, and the layering is most of the value.
215
286
  One-shot commands that print and exit: `--install {claude,claude-desktop,copilot,cursor}` (with
216
- `--force`), `--update`, `--assets-root`, `--mcp-report`, `--statusline`, `-h`. More:
287
+ `--force`), `--install-hooks` / `--remove-hooks` (with `--yes`), `--hook`, `--update`,
288
+ `--assets-root`, `--mcp-report`, `--statusline`, `-h`. More:
217
289
  [store binding](https://github.com/Ink01101011/bantamkit/blob/main/docs/mcp.md#which-memory-store-the-server-binds) ·
218
290
  [pinning](https://github.com/Ink01101011/bantamkit/blob/main/docs/memory.md#pinning-the-store-bantamkit_memory_dir) ·
219
291
  [event log](https://github.com/Ink01101011/bantamkit/blob/main/docs/eventlog.md#the-switch) ·
220
292
  [prices](https://github.com/Ink01101011/bantamkit/blob/main/docs/ledger.md).
221
293
 
222
- ## Update
294
+ ## 🔄 Update
223
295
 
224
296
  ```bash
225
- <env>/bin/bantamkit-mcp --update # a pip install from PyPI: runs pip install --upgrade bantamkit
297
+ <env>/bin/bantamkit-mcp --update # a pip install from PyPI: runs pip install --upgrade bantamkit==<latest>
226
298
  pip install -U "bantamkit[mcp]" # the same, by hand
227
299
  pipx upgrade bantamkit # pipx
228
300
  uv tool upgrade bantamkit # uv
229
301
  ```
230
302
 
231
- `--update` (`check the package index and update this install if it differs, then exit`) upgrades
232
- an install from PyPI with this interpreter's pip; it is the only network access here. An editable
303
+ `--update` (`check the package index and update this install if it differs, then exit`) asks
304
+ this interpreter's pip which version the index has (`pip install --dry-run --report -`, so pip's
305
+ own index, proxy and credentials apply), installs exactly that version, and says `updated … to
306
+ <latest>` only after the installed distribution reports it; it is the only network access here. An editable
233
307
  install, a local file or a source tree is refused with exit 1 and a sentence naming the manual
234
308
  route (for a clone, `git pull`). For a wheelhouse, repeat the download and install.
235
309
 
@@ -237,21 +311,21 @@ route (for a clone, `git pull`). For a wheelhouse, repeat the download and insta
237
311
  Desktop). `bantamkit_status` prints the version **and the `build_id` of the code answering
238
312
  you**; a new version with an old `build_id` means an old process.
239
313
 
240
- ## Troubleshooting
314
+ ## 🩺 Troubleshooting
241
315
 
242
316
  | Symptom | Fix |
243
317
  |---|---|
244
318
  | The host times out; the server never answers | A `pipx run` entry with a cold cache and no network. Use [Install once, run offline](#install-once-run-offline) |
245
319
  | `ENOENT` from the host | A GUI host does not read your shell rc, so `pipx` is not on its PATH. `--install` records an absolute path |
246
320
  | `bantamkit-mcp needs the MCP extra: pip install "bantamkit[mcp]"` | Install with the `[mcp]` extra |
247
- | `already has a bantamkit entry with different settings … re-run with --force to replace it` | Re-run with `--force`; the old file is kept as `.backup-<date>` |
321
+ | `already has a bantamkit entry with different settings … re-run with --force to replace it` | Re-run with `--force`; the old file is kept as `.backup-<date>` (`.backup-<date>.1` and on for a later write the same day) |
248
322
  | `… is not valid JSON, so this refuses to touch it` | Fix the host's file by hand, then re-run |
249
323
  | `MCP server bantamkit already exists in user config` | `claude mcp remove bantamkit -s user`, then install again |
250
324
  | `pinned memory store must be an absolute path` or `pinned memory store is unreachable` | Give `BANTAMKIT_MEMORY_DIR` an absolute path that exists |
251
325
  | Recall finds nothing, or the wrong store | Set `BANTAMKIT_MEMORY_DIR`; the reply names the store it searched ([the three states](https://github.com/Ink01101011/bantamkit/blob/main/docs/mcp.md#the-three-states-and-what-memory_recall-tells-the-model)) |
252
- | `AssetNotFound: no assets directory found; set BANTAMKIT_ASSETS` | See [The asset pack](#the-asset-pack) |
326
+ | `AssetNotFound: no assets directory found; set BANTAMKIT_ASSETS` | See [The asset pack](#-the-asset-pack) |
253
327
 
254
- ## What it serves
328
+ ## 🧰 What it serves
255
329
 
256
330
  It serves 14 tools, the `bantamkit_status` prompt and two resource templates
257
331
  (`bantamkit://skills/{name}`, `bantamkit://rubrics/{name}`):
@@ -266,29 +340,29 @@ It serves 14 tools, the `bantamkit_status` prompt and two resource templates
266
340
  | `skill_audit` | audit a skill catalogue for findings |
267
341
  | `shiftwork_clock_in` | open a unit of work and get its brief |
268
342
  | `shiftwork_clock_out` | close a unit with status and accounting |
269
- | `shiftwork_status` | report the open cursor |
343
+ | `shiftwork_status` | read-only progress summary of a checkpoint |
270
344
  | `shiftwork_plan` | read-only: which units of a checkpoint its `depends_on` graph permits to run at once. Never moves the cursor |
271
345
  | `work_plan` | turn any `{id, depends_on, priority}` graph into the batches that may run in parallel, plus the widest fan-out |
272
346
  | `token_ledger` | what a session cost, read off the host's transcripts |
273
- | `bantamkit_status` | report store health against its budget |
347
+ | `bantamkit_status` | is bantamkit working, and which build: version, `build_id`, store health against its budget |
274
348
  | `build_identity` | report the fingerprint of the source on disk, not the executing code — useful when a machine carries two installs under one name |
275
349
 
276
- The document reader `bantamkit_read` left the served tools in job50 (2026-09-12) and stays in the
277
- library as `bantamkit.docread`.
350
+ The document reader `bantamkit_read` is no longer served; it stays in the library as
351
+ `bantamkit.docread`.
278
352
 
279
- ## Requirements
353
+ ## 📋 Requirements
280
354
 
281
355
  Python 3.11 or newer. Three runtime dependencies — `httpx`, `jsonschema`, `pyyaml` — plus `mcp`
282
356
  under the `[mcp]` extra.
283
357
 
284
- ## The asset pack
358
+ ## 📦 The asset pack
285
359
 
286
360
  Contracts, schemas, eval tasks, rubrics and tool manifests ship inside the package.
287
361
  `bantamkit-mcp --assets-root` prints the resolved directory and its file count, and
288
362
  `BANTAMKIT_ASSETS` overrides it. A build that cannot find the pack fails instead of shipping
289
- without it — deliberately, because the silent version shipped once.
363
+ without it.
290
364
 
291
- ## The operator CLI: `python -m bantamkit.memory`
365
+ ## 🧹 The operator CLI: `python -m bantamkit.memory`
292
366
 
293
367
  Store maintenance, not served over MCP:
294
368
 
@@ -304,10 +378,10 @@ python -m bantamkit.memory restore <name>
304
378
  `archive` moves a fact out without deleting it; `restore` brings it back by name.
305
379
  Full reference: [docs/memory.md → The operator CLI](https://github.com/Ink01101011/bantamkit/blob/main/docs/memory.md#the-operator-cli).
306
380
 
307
- ## Where the Python and Node servers differ
381
+ ## 🔀 Where the Python and Node servers differ
308
382
 
309
383
  Both servers read and write the same on-disk store. Every feature lands in both in one change, and
310
- a conformance case compares their answers. Three differences are deliberate, each ruled in the
384
+ a conformance case compares their answers. Four differences are deliberate, each ruled in the
311
385
  [divergence table](https://github.com/Ink01101011/bantamkit/blob/main/docs/porting.md#where-the-two-runtimes-deliberately-differ):
312
386
 
313
387
  - **pdf, `.doc` and `.rtf`:** this side's reader (`bantamkit.docread`) reads them, pdf with a
@@ -317,20 +391,25 @@ a conformance case compares their answers. Three differences are deliberate, eac
317
391
  text and errors alike.
318
392
  - **`build_id`** hashes the executing tree, so it differs by construction; `assets_digest` is
319
393
  identical, and that is the one that carries meaning.
394
+ - **Hand-edited YAML that only this side reads.** A fact file's frontmatter is read by PyYAML
395
+ here. Eight shapes it accepts — an anchor, `!!str`, a flow mapping (empty or not), a nested
396
+ flow sequence, a flow-sequence pair, a flow sequence over two lines, an anchored sequence
397
+ item — are refused by name on the Node side, whose recall and save skip that file and say
398
+ so. Every fact the tools *write* is in a shape both sides read.
320
399
 
321
- ## Module API
400
+ ## 🧩 Module API
322
401
 
323
402
  The package is a server first, but it is importable too: `import bantamkit` is a supported call,
324
403
  and the names behind it are part of what is published.
325
404
 
326
405
  Everything in this section was measured against the **wheel**, not the source tree: a
327
- `bantamkit-0.35.3-py3-none-any.whl` built with `pip wheel --no-deps --no-build-isolation`,
328
- installed into a throwaway venv with `--no-index --no-deps`, and imported from a working
329
- directory outside the checkout (2026-09-21). A name that only exists in `src/` is not API; this
406
+ `bantamkit-0.35.9-py3-none-any.whl` built from this tree with `pip wheel --no-deps
407
+ --no-build-isolation`, installed into a throwaway venv, and imported from a working directory
408
+ outside the checkout (2026-10-15). A name that only exists in `src/` is not API; this
330
409
  is what an importer gets.
331
410
 
332
- **There is no `exports` map in Python, so nothing is sealed.** The wheel carries **31** modules
333
- and every one is deep-importable — `from bantamkit.mcpserver import main` resolves, and so does
411
+ **There is no `exports` map in Python, so nothing is sealed.** Every module in the wheel is
412
+ deep-importable — `from bantamkit.mcpserver import main` resolves, and so does
334
413
  `from bantamkit.memory import MemoryStore`. That is the opposite of the npm package, which
335
414
  declares a single `.` entry point and refuses every deep import with
336
415
  `ERR_PACKAGE_PATH_NOT_EXPORTED`. Only the names below are *intended* as API; the rest are
@@ -357,7 +436,7 @@ as a side effect of the package's own imports (`agent`, `assets`, `budget`, `cli
357
436
  **This is not the npm package's export surface.** Both runtimes serve the same fourteen MCP
358
437
  tools, but what each one exports *to an importer* is a different product: here it is the
359
438
  agent/critique/eval library above; there it is the memory store, the asset pack, the event log,
360
- the shift-work tools and a set of CPython-semantics shims — 139 values behind one entry point. Of
439
+ the shift-work tools and a set of CPython-semantics shims — 141 values behind one entry point. Of
361
440
  these 30 names exactly **three** are spelled the same on the npm side (`BantamError`, `Memory`,
362
441
  `MemoryStore`), and a spelling is not a promise about behaviour. A parity claim about the MCP
363
442
  tools is not a parity claim about these.
@@ -411,7 +490,7 @@ It prints `45`. The 30 values alone, without the submodules:
411
490
  Both numbers move whenever `src/bantamkit/__init__.py` does, which is why they are quoted with
412
491
  the command that prints them rather than kept in prose.
413
492
 
414
- ## Development
493
+ ## 🧪 Development
415
494
 
416
495
  ```bash
417
496
  git clone https://github.com/Ink01101011/bantamkit
@@ -427,7 +506,7 @@ The cross-runtime gate needs Node:
427
506
  node tools/conformance/run.mjs --all
428
507
  ```
429
508
 
430
- ## Documentation
509
+ ## 📚 Documentation
431
510
 
432
511
  | Page | Covers |
433
512
  |---|---|