dos-kernel 0.22.0__tar.gz → 0.24.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 (407) hide show
  1. dos_kernel-0.24.1/PKG-INFO +1114 -0
  2. dos_kernel-0.24.1/README.md +1065 -0
  3. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/pyproject.toml +22 -5
  4. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/src/dos/__init__.py +1 -1
  5. dos_kernel-0.24.1/src/dos/_demo_story.py +56 -0
  6. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/src/dos/arbiter.py +47 -15
  7. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/src/dos/cli.py +345 -48
  8. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/src/dos/commit_audit.py +10 -1
  9. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/src/dos/drivers/ci_status.py +3 -1
  10. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/src/dos/drivers/citation_resolve.py +1 -1
  11. dos_kernel-0.24.1/src/dos/drivers/design_doc_plan.py +221 -0
  12. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/src/dos/drivers/memory_recall.py +4 -0
  13. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/src/dos/drivers/os_acceptance.py +4 -0
  14. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/src/dos/env_print.py +6 -0
  15. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/src/dos/git_delta.py +2 -0
  16. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/src/dos/health.py +1 -0
  17. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/src/dos/help_summary.py +70 -3
  18. dos_kernel-0.24.1/src/dos/hook_observation.py +338 -0
  19. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/src/dos/interpret.py +10 -1
  20. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/src/dos/oracle.py +1 -0
  21. dos_kernel-0.24.1/src/dos/override_facts.py +215 -0
  22. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/src/dos/phase_shipped.py +4 -0
  23. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/src/dos/plan_board.py +13 -4
  24. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/src/dos/plan_source.py +129 -7
  25. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/src/dos/preflight.py +1 -0
  26. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/src/dos/pretool_sensor.py +55 -0
  27. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/src/dos/reasons.py +1 -1
  28. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/src/dos/resume_evidence.py +2 -0
  29. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/src/dos/skills/EXAMPLES.md +10 -6
  30. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/src/dos/skills/dos-dispatch/SKILL.md +39 -4
  31. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/src/dos/skills/dos-dispatch-loop/SKILL.md +5 -3
  32. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/src/dos/skills/dos-next-up/SKILL.md +1 -1
  33. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/src/dos/skills/dos-replan/SKILL.md +18 -0
  34. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/src/dos/skills/dos-replan-loop/SKILL.md +2 -2
  35. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/src/dos/skills/dos-self-improve/SKILL.md +1 -1
  36. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/src/dos/skills/dos-supervise-loop/SKILL.md +6 -3
  37. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/src/dos/timeline.py +1 -0
  38. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/src/dos/verdict_cli.py +1 -0
  39. dos_kernel-0.24.1/src/dos_kernel.egg-info/PKG-INFO +1114 -0
  40. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/src/dos_kernel.egg-info/SOURCES.txt +12 -0
  41. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/src/dos_kernel.egg-info/entry_points.txt +4 -0
  42. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_arbiter.py +47 -0
  43. dos_kernel-0.24.1/tests/test_canonical_example_lockstep.py +212 -0
  44. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_cli_ergonomics.py +112 -2
  45. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_commit_audit.py +19 -0
  46. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_decisions.py +3 -3
  47. dos_kernel-0.24.1/tests/test_design_doc_plan_source.py +381 -0
  48. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_docs_version_drift.py +4 -0
  49. dos_kernel-0.24.1/tests/test_gitignore_hygiene.py +116 -0
  50. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_help_summary.py +45 -0
  51. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_hook_dialect.py +15 -0
  52. dos_kernel-0.24.1/tests/test_hook_observation.py +392 -0
  53. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_init_hooks_crossvendor.py +22 -0
  54. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_install_drift.py +7 -4
  55. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_interpret_parity.py +5 -0
  56. dos_kernel-0.24.1/tests/test_override_window.py +273 -0
  57. dos_kernel-0.24.1/tests/test_readme_assembly.py +92 -0
  58. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_release_bump.py +34 -0
  59. dos_kernel-0.24.1/tests/test_subprocess_stdin_hygiene.py +73 -0
  60. dos_kernel-0.24.1/tests/test_workflow_yaml_parses.py +83 -0
  61. dos_kernel-0.22.0/PKG-INFO +0 -859
  62. dos_kernel-0.22.0/README.md +0 -810
  63. dos_kernel-0.22.0/src/dos_kernel.egg-info/PKG-INFO +0 -859
  64. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/LICENSE +0 -0
  65. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/setup.cfg +0 -0
  66. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/src/dos/_filelock.py +0 -0
  67. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/src/dos/_job_policy.py +0 -0
  68. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/src/dos/_tree.py +0 -0
  69. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/src/dos/admission.py +0 -0
  70. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/src/dos/answer_shape.py +0 -0
  71. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/src/dos/archive_lock.py +0 -0
  72. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/src/dos/arg_provenance.py +0 -0
  73. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/src/dos/attest.py +0 -0
  74. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/src/dos/breaker.py +0 -0
  75. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/src/dos/churn.py +0 -0
  76. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/src/dos/claim_extract.py +0 -0
  77. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/src/dos/claim_ttl.py +0 -0
  78. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/src/dos/completion.py +0 -0
  79. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/src/dos/concurrency_class.py +0 -0
  80. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/src/dos/config.py +0 -0
  81. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/src/dos/config_lint.py +0 -0
  82. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/src/dos/cooldown.py +0 -0
  83. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/src/dos/coverage.py +0 -0
  84. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/src/dos/dangling_intent.py +0 -0
  85. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/src/dos/data_class.py +0 -0
  86. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/src/dos/decisions.py +0 -0
  87. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/src/dos/decisions_tui.py +0 -0
  88. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/src/dos/dispatch_top.py +0 -0
  89. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/src/dos/dispatch_top_tui.py +0 -0
  90. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/src/dos/drivers/__init__.py +0 -0
  91. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/src/dos/drivers/decision_stop.py +0 -0
  92. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/src/dos/drivers/export_file.py +0 -0
  93. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/src/dos/drivers/export_otlp.py +0 -0
  94. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/src/dos/drivers/export_statsd.py +0 -0
  95. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/src/dos/drivers/hook_dialects.py +0 -0
  96. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/src/dos/drivers/job.py +0 -0
  97. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/src/dos/drivers/llm_judge.py +0 -0
  98. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/src/dos/drivers/notify_slack.py +0 -0
  99. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/src/dos/drivers/notify_webhook.py +0 -0
  100. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/src/dos/drivers/operator_judge.py +0 -0
  101. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/src/dos/drivers/paste_log.py +0 -0
  102. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/src/dos/drivers/plan_scope.py +0 -0
  103. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/src/dos/drivers/self_improve.py +0 -0
  104. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/src/dos/drivers/similarity_judge.py +0 -0
  105. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/src/dos/drivers/state_diff.py +0 -0
  106. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/src/dos/drivers/supervisor.py +0 -0
  107. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/src/dos/drivers/watchdog.py +0 -0
  108. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/src/dos/drivers/workshop.py +0 -0
  109. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/src/dos/durable_schema.py +0 -0
  110. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/src/dos/effect_witness.py +0 -0
  111. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/src/dos/efficiency.py +0 -0
  112. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/src/dos/enforce.py +0 -0
  113. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/src/dos/enumerate.py +0 -0
  114. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/src/dos/event_severity.py +0 -0
  115. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/src/dos/evidence.py +0 -0
  116. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/src/dos/exec_capability.py +0 -0
  117. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/src/dos/export_cursor.py +0 -0
  118. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/src/dos/exporter.py +0 -0
  119. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/src/dos/firing_label.py +0 -0
  120. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/src/dos/fleet_roll.py +0 -0
  121. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/src/dos/gate_classify.py +0 -0
  122. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/src/dos/gh4_coverage.py +0 -0
  123. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/src/dos/guard.py +0 -0
  124. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/src/dos/home.py +0 -0
  125. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/src/dos/hook_binary.py +0 -0
  126. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/src/dos/hook_dialect.py +0 -0
  127. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/src/dos/hook_exit.py +0 -0
  128. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/src/dos/hook_install.py +0 -0
  129. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/src/dos/id_alloc.py +0 -0
  130. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/src/dos/improve.py +0 -0
  131. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/src/dos/intent_ledger.py +0 -0
  132. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/src/dos/intervention.py +0 -0
  133. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/src/dos/intervention_eval.py +0 -0
  134. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/src/dos/journal_delta.py +0 -0
  135. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/src/dos/judge_eval.py +0 -0
  136. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/src/dos/judges.py +0 -0
  137. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/src/dos/lane_infer.py +0 -0
  138. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/src/dos/lane_journal.py +0 -0
  139. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/src/dos/lane_lease.py +0 -0
  140. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/src/dos/lane_overlap.py +0 -0
  141. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/src/dos/lease_health.py +0 -0
  142. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/src/dos/lifecycle.py +0 -0
  143. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/src/dos/liveness.py +0 -0
  144. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/src/dos/lock_modes.py +0 -0
  145. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/src/dos/log_source.py +0 -0
  146. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/src/dos/loop_decide.py +0 -0
  147. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/src/dos/marker_gate.py +0 -0
  148. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/src/dos/marker_sensor.py +0 -0
  149. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/src/dos/noop_streak.py +0 -0
  150. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/src/dos/notify.py +0 -0
  151. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/src/dos/observe.py +0 -0
  152. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/src/dos/overlap_eval.py +0 -0
  153. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/src/dos/overlap_policy.py +0 -0
  154. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/src/dos/packet_sidecar.py +0 -0
  155. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/src/dos/pick_priority.py +0 -0
  156. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/src/dos/pickable.py +0 -0
  157. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/src/dos/picker_oracle.py +0 -0
  158. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/src/dos/plan_board_tui.py +0 -0
  159. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/src/dos/posttool_sensor.py +0 -0
  160. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/src/dos/precursor_gate.py +0 -0
  161. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/src/dos/precursor_gate_eval.py +0 -0
  162. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/src/dos/proc_delta.py +0 -0
  163. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/src/dos/productivity.py +0 -0
  164. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/src/dos/provider_limit.py +0 -0
  165. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/src/dos/py.typed +0 -0
  166. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/src/dos/reason_morphology.py +0 -0
  167. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/src/dos/reconcile.py +0 -0
  168. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/src/dos/recurring_wedge.py +0 -0
  169. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/src/dos/render.py +0 -0
  170. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/src/dos/result_state.py +0 -0
  171. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/src/dos/resume.py +0 -0
  172. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/src/dos/retention.py +0 -0
  173. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/src/dos/reward.py +0 -0
  174. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/src/dos/rewind.py +0 -0
  175. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/src/dos/rewind_evidence.py +0 -0
  176. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/src/dos/rewind_tokens.py +0 -0
  177. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/src/dos/run_id.py +0 -0
  178. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/src/dos/scope.py +0 -0
  179. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/src/dos/scope_source.py +0 -0
  180. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/src/dos/scout.py +0 -0
  181. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/src/dos/self_modify.py +0 -0
  182. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/src/dos/sibling_scan.py +0 -0
  183. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/src/dos/skills/dos-class-cycle/SKILL.md +0 -0
  184. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/src/dos/skills/dos-goal-gate/SKILL.md +0 -0
  185. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/src/dos/skills/dos-promote/SKILL.md +0 -0
  186. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/src/dos/skills/dos-unstick/SKILL.md +0 -0
  187. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/src/dos/skills/dos-witness-claim/SKILL.md +0 -0
  188. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/src/dos/stamp.py +0 -0
  189. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/src/dos/state_health.py +0 -0
  190. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/src/dos/status.py +0 -0
  191. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/src/dos/stop_policy.py +0 -0
  192. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/src/dos/supervise.py +0 -0
  193. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/src/dos/testwitness.py +0 -0
  194. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/src/dos/tokens.py +0 -0
  195. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/src/dos/tool_stream.py +0 -0
  196. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/src/dos/tool_stream_eval.py +0 -0
  197. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/src/dos/trace.py +0 -0
  198. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/src/dos/verdict.py +0 -0
  199. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/src/dos/verdict_journal.py +0 -0
  200. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/src/dos/verdict_rollup.py +0 -0
  201. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/src/dos/verdicts.py +0 -0
  202. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/src/dos/wedge_reason.py +0 -0
  203. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/src/dos_kernel.egg-info/dependency_links.txt +0 -0
  204. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/src/dos_kernel.egg-info/requires.txt +0 -0
  205. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/src/dos_kernel.egg-info/top_level.txt +0 -0
  206. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/src/dos_mcp/__init__.py +0 -0
  207. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/src/dos_mcp/py.typed +0 -0
  208. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/src/dos_mcp/server.py +0 -0
  209. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_admission.py +0 -0
  210. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_agent_surface.py +0 -0
  211. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_agenthallu_replay.py +0 -0
  212. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_agentprocessbench_replay.py +0 -0
  213. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_answer_shape.py +0 -0
  214. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_archive_lock.py +0 -0
  215. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_arg_provenance.py +0 -0
  216. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_attest.py +0 -0
  217. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_backflow_ledger.py +0 -0
  218. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_bench_layering.py +0 -0
  219. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_breaker.py +0 -0
  220. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_build_wheels_binary_format.py +0 -0
  221. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_central_index.py +0 -0
  222. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_churn.py +0 -0
  223. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_ci_status.py +0 -0
  224. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_citation_resolve.py +0 -0
  225. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_claim_extract.py +0 -0
  226. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_claim_ttl.py +0 -0
  227. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_claims_lint.py +0 -0
  228. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_cli_loop.py +0 -0
  229. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_cli_pickable_enumerate.py +0 -0
  230. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_cmd_status.py +0 -0
  231. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_completion.py +0 -0
  232. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_concurrency_class.py +0 -0
  233. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_config_lint.py +0 -0
  234. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_cooldown.py +0 -0
  235. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_coverage.py +0 -0
  236. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_dangling_intent.py +0 -0
  237. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_data_class.py +0 -0
  238. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_dispatch_loop_substrate.py +0 -0
  239. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_dispatch_top.py +0 -0
  240. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_doctor_json.py +0 -0
  241. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_dos_react_terminal_error.py +0 -0
  242. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_drivers_self_improve.py +0 -0
  243. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_drivers_supervisor.py +0 -0
  244. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_drivers_watchdog.py +0 -0
  245. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_drivers_workshop.py +0 -0
  246. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_durable_schema.py +0 -0
  247. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_effect_witness.py +0 -0
  248. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_efficiency.py +0 -0
  249. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_enforce.py +0 -0
  250. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_ensure_home.py +0 -0
  251. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_enterpriseops_harness.py +0 -0
  252. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_enumerate.py +0 -0
  253. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_env_print.py +0 -0
  254. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_event_severity.py +0 -0
  255. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_evidence.py +0 -0
  256. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_exec_capability.py +0 -0
  257. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_export_cli.py +0 -0
  258. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_export_cursor.py +0 -0
  259. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_export_otlp.py +0 -0
  260. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_export_statsd.py +0 -0
  261. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_exporter.py +0 -0
  262. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_feasibility_split.py +0 -0
  263. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_filelock.py +0 -0
  264. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_filepath_backstop_batch.py +0 -0
  265. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_firing_label.py +0 -0
  266. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_fleet_framework_examples.py +0 -0
  267. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_fleet_roll.py +0 -0
  268. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_gate_cli.py +0 -0
  269. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_gh4_coverage.py +0 -0
  270. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_git_hygiene.py +0 -0
  271. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_go_hook_parity.py +0 -0
  272. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_guard.py +0 -0
  273. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_health.py +0 -0
  274. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_hermes_integration_example.py +0 -0
  275. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_home_layering.py +0 -0
  276. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_home_no_temp_pollution.py +0 -0
  277. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_hook_binaries_bundled.py +0 -0
  278. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_hook_binary_locator.py +0 -0
  279. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_hook_exit.py +0 -0
  280. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_hook_pretool.py +0 -0
  281. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_hook_stop.py +0 -0
  282. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_id_alloc.py +0 -0
  283. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_improve.py +0 -0
  284. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_init_hooks.py +0 -0
  285. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_init_skills.py +0 -0
  286. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_install_levels.py +0 -0
  287. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_intent_ledger.py +0 -0
  288. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_intervention.py +0 -0
  289. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_intervention_cli.py +0 -0
  290. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_intervention_eval.py +0 -0
  291. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_journal_delta.py +0 -0
  292. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_judge.py +0 -0
  293. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_judge_eval.py +0 -0
  294. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_judges.py +0 -0
  295. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_lane_adopt.py +0 -0
  296. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_lane_halt.py +0 -0
  297. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_lane_infer.py +0 -0
  298. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_lane_journal.py +0 -0
  299. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_lane_lease.py +0 -0
  300. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_lane_lease_expiry.py +0 -0
  301. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_lane_lease_mutex.py +0 -0
  302. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_lane_overlap.py +0 -0
  303. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_leak_scan.py +0 -0
  304. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_lease_health.py +0 -0
  305. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_lifecycle.py +0 -0
  306. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_liveness.py +0 -0
  307. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_llm_judge_vendor_seam.py +0 -0
  308. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_lock_modes.py +0 -0
  309. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_log_source.py +0 -0
  310. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_marker_gate.py +0 -0
  311. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_marker_sensor.py +0 -0
  312. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_mcp_server.py +0 -0
  313. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_memory_recall.py +0 -0
  314. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_noop_streak.py +0 -0
  315. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_notify.py +0 -0
  316. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_notify_cli.py +0 -0
  317. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_notify_slack.py +0 -0
  318. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_notify_webhook.py +0 -0
  319. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_observe.py +0 -0
  320. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_operator_judge.py +0 -0
  321. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_oracle_and_loop.py +0 -0
  322. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_oracle_forgeability_provenance.py +0 -0
  323. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_oracle_grep_in_process.py +0 -0
  324. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_overlap_policy.py +0 -0
  325. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_packet_sidecar.py +0 -0
  326. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_phase_labels.py +0 -0
  327. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_pick_priority.py +0 -0
  328. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_pickable.py +0 -0
  329. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_plan_board.py +0 -0
  330. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_plan_source.py +0 -0
  331. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_plugin_manifest.py +0 -0
  332. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_posttool_sensor.py +0 -0
  333. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_precursor_gate.py +0 -0
  334. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_precursor_gate_eval.py +0 -0
  335. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_preflight_sidecar.py +0 -0
  336. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_proc_delta.py +0 -0
  337. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_productivity.py +0 -0
  338. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_prop_breaker.py +0 -0
  339. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_prop_cooldown.py +0 -0
  340. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_prop_efficiency.py +0 -0
  341. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_prop_install_wrappers.py +0 -0
  342. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_prop_overlap_soundness.py +0 -0
  343. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_prop_productivity.py +0 -0
  344. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_prop_reconcile.py +0 -0
  345. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_prop_reward_nonforgeability.py +0 -0
  346. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_prop_tree.py +0 -0
  347. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_provider_limit.py +0 -0
  348. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_reconcile.py +0 -0
  349. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_recurring_wedge.py +0 -0
  350. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_refusal_and_tokens.py +0 -0
  351. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_reindex.py +0 -0
  352. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_render.py +0 -0
  353. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_replan_skip.py +0 -0
  354. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_result_state.py +0 -0
  355. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_resume_cli.py +0 -0
  356. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_resume_evidence.py +0 -0
  357. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_resume_reachability.py +0 -0
  358. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_retention.py +0 -0
  359. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_reward.py +0 -0
  360. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_rewind.py +0 -0
  361. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_rewind_cli.py +0 -0
  362. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_scope.py +0 -0
  363. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_scope_gate.py +0 -0
  364. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_scope_gate_cli.py +0 -0
  365. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_scope_source.py +0 -0
  366. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_scout.py +0 -0
  367. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_selfmodify_hook_probe.py +0 -0
  368. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_sibling_scan.py +0 -0
  369. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_similarity_judge.py +0 -0
  370. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_skill_pack_dispatch.py +0 -0
  371. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_skill_pack_generic.py +0 -0
  372. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_skill_pack_litmus.py +0 -0
  373. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_skill_pack_operator_tier.py +0 -0
  374. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_skill_pack_replan.py +0 -0
  375. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_stall_sim.py +0 -0
  376. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_stamp_convention.py +0 -0
  377. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_stamp_doctor.py +0 -0
  378. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_stamp_filepath_rung.py +0 -0
  379. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_stamp_trailer.py +0 -0
  380. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_state_diff.py +0 -0
  381. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_state_health.py +0 -0
  382. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_state_health_doctor.py +0 -0
  383. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_state_home.py +0 -0
  384. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_status_digest.py +0 -0
  385. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_stop_policy.py +0 -0
  386. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_supervise.py +0 -0
  387. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_testwitness.py +0 -0
  388. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_timeline_timing.py +0 -0
  389. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_tool_stream.py +0 -0
  390. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_tool_stream_cli.py +0 -0
  391. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_toolathlon_live_adapter.py +0 -0
  392. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_toolathlon_replay.py +0 -0
  393. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_toolathlon_rewind_ceiling.py +0 -0
  394. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_trace.py +0 -0
  395. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_trajectory_audit.py +0 -0
  396. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_vendor_agnostic_kernel.py +0 -0
  397. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_verdict_cli.py +0 -0
  398. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_verdict_contract.py +0 -0
  399. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_verdict_journal.py +0 -0
  400. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_verdict_rollup.py +0 -0
  401. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_verdicts.py +0 -0
  402. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_verify_color.py +0 -0
  403. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_verify_demo_contract.py +0 -0
  404. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_verify_no_plan.py +0 -0
  405. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_verify_non_git_rung.py +0 -0
  406. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_verify_plugin_install.py +0 -0
  407. {dos_kernel-0.22.0 → dos_kernel-0.24.1}/tests/test_workspace_config.py +0 -0
@@ -0,0 +1,1114 @@
1
+ Metadata-Version: 2.4
2
+ Name: dos-kernel
3
+ Version: 0.24.1
4
+ Summary: Dispatch Operating System — the domain-free trust substrate for fleets of autonomous agents (verdict spine, ship oracle, structured refusal, lane arbiter, correlation spine).
5
+ Author: Anthony Chaudhary
6
+ License: MIT
7
+ Project-URL: Homepage, https://github.com/anthony-chaudhary/dos-kernel
8
+ Project-URL: Documentation, https://github.com/anthony-chaudhary/dos-kernel/blob/master/docs/QUICKSTART.md
9
+ Project-URL: Repository, https://github.com/anthony-chaudhary/dos-kernel
10
+ Project-URL: Issues, https://github.com/anthony-chaudhary/dos-kernel/issues
11
+ Project-URL: Changelog, https://github.com/anthony-chaudhary/dos-kernel/tree/master/docs/releases
12
+ Keywords: agents,ai-agents,llm,multi-agent,agent-orchestration,orchestration,dispatch,scheduler,oracle,leases,verification,trust,mcp
13
+ Classifier: Development Status :: 4 - Beta
14
+ Classifier: Intended Audience :: Developers
15
+ Classifier: License :: OSI Approved :: MIT License
16
+ Classifier: Operating System :: OS Independent
17
+ Classifier: Programming Language :: Python :: 3
18
+ Classifier: Programming Language :: Python :: 3.11
19
+ Classifier: Programming Language :: Python :: 3.12
20
+ Classifier: Programming Language :: Python :: 3.13
21
+ Classifier: Topic :: Software Development :: Quality Assurance
22
+ Classifier: Topic :: Software Development :: Version Control :: Git
23
+ Classifier: Topic :: System :: Distributed Computing
24
+ Classifier: Typing :: Typed
25
+ Requires-Python: >=3.11
26
+ Description-Content-Type: text/markdown
27
+ License-File: LICENSE
28
+ Requires-Dist: pyyaml>=6.0
29
+ Provides-Extra: dev
30
+ Requires-Dist: pytest>=8.0; extra == "dev"
31
+ Requires-Dist: build>=1.0; extra == "dev"
32
+ Requires-Dist: wheel>=0.43; extra == "dev"
33
+ Requires-Dist: ruff>=0.13; extra == "dev"
34
+ Requires-Dist: mypy>=1.17; extra == "dev"
35
+ Requires-Dist: hypothesis>=6.100; extra == "dev"
36
+ Provides-Extra: mcp
37
+ Requires-Dist: mcp>=1.2; extra == "mcp"
38
+ Provides-Extra: tui
39
+ Requires-Dist: rich>=13; extra == "tui"
40
+ Requires-Dist: windows-curses>=2.3; sys_platform == "win32" and extra == "tui"
41
+ Provides-Extra: notify-slack
42
+ Requires-Dist: slack-helpers>=0.2; extra == "notify-slack"
43
+ Provides-Extra: export-otlp
44
+ Requires-Dist: opentelemetry-sdk>=1.20; extra == "export-otlp"
45
+ Requires-Dist: opentelemetry-exporter-otlp-proto-http>=1.20; extra == "export-otlp"
46
+ Provides-Extra: paper
47
+ Requires-Dist: arxiv-latex-cleaner>=1.0; extra == "paper"
48
+ Dynamic: license-file
49
+
50
+ <!-- GENERATED FILE — do not edit README.md directly.
51
+ The source of truth is docs/readme/ (one file per section, assembled
52
+ in filename order). Edit the part, then run:
53
+ python scripts/build_readme.py
54
+ tests/test_readme_assembly.py pins this file to the parts. -->
55
+
56
+ # DOS — the Dispatch Operating System
57
+
58
+ > ### Catch your AI agents when they lie about what they shipped.
59
+
60
+ [![PyPI](https://img.shields.io/pypi/v/dos-kernel)](https://pypi.org/project/dos-kernel/)
61
+ [![Python versions](https://img.shields.io/pypi/pyversions/dos-kernel)](https://pypi.org/project/dos-kernel/)
62
+ [![CI](https://github.com/anthony-chaudhary/dos-kernel/actions/workflows/ci.yml/badge.svg)](https://github.com/anthony-chaudhary/dos-kernel/actions/workflows/ci.yml)
63
+ [![verified by DOS](https://github.com/anthony-chaudhary/dos-kernel/actions/workflows/dos-gate.yml/badge.svg)](https://github.com/anthony-chaudhary/dos-kernel/actions/workflows/dos-gate.yml)
64
+ [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](https://github.com/anthony-chaudhary/dos-kernel/blob/master/LICENSE)
65
+
66
+ <p align="center">
67
+ <img src="https://raw.githubusercontent.com/anthony-chaudhary/dos-kernel/master/docs/assets/loop-hero.svg" alt="Two agent fleets side by side. Left, no referee: agents all report 'done!', every report is believed, and silent corruption (lies, collisions, spin) piles up into a codebase that 'sorta works' and can't be changed. Right, DOS adjudicates: dos verify reads git and the run branches to SHIPPED (exit 0, land it) or NOT_SHIPPED (exit 1, re-dispatch — caught), and that verdict steers the next step." width="100%">
68
+ <br>
69
+ <em>Run a fleet of agents on one repo. The left loop just feels like progress; the right one you can steer.
70
+ The only difference is a verdict DOS reads from the real world — here, git — never the agent's word.</em>
71
+ </p>
72
+
73
+ An AI agent will tell you it finished. DOS checks the real world instead of
74
+ taking its word — and the nearest piece of the real world is your git history.
75
+
76
+ An agent says it shipped the login endpoint. Did it? Run one command,
77
+ `dos verify`, and it answers from the artifacts the work actually left behind,
78
+ not from what the agent typed. If a commit backs the claim, you get `SHIPPED`
79
+ and exit code `0`. If nothing landed, you get `NOT_SHIPPED` and exit code `1`.
80
+ The agent's story never enters into it. (Git is just the first witness DOS
81
+ reads; the file tree, the clock, a CI status, a test environment's own state
82
+ are others — anything the agent didn't author.)
83
+
84
+ ```bash
85
+ dos verify AUTH AUTH1 # → SHIPPED AUTH AUTH1 e62f74d (exit 0)
86
+ dos verify AUTH AUTH2 # → NOT_SHIPPED AUTH AUTH2 (exit 1)
87
+ ```
88
+
89
+ That's the smallest version. It scales up, too: point a dozen agents at one
90
+ repo — in CI, in a fleet, racing on the same files — and DOS also tells you
91
+ which ones are stepping on each other, which one is spinning in circles, and
92
+ which claim of "done" is real. Every answer comes from the artifacts (git, the
93
+ file tree, the clock), never the narration. It works on a plain `git` repo with
94
+ zero config, and the only thing you ever install is one small Python package.
95
+
96
+ > ⏱️ **Want to try it right now?** Jump to **[Try it in 60 seconds](#try-it-in-60-seconds)**
97
+ > — one command, real output, then come back for the why.
98
+
99
+ <sub>**v0.24.1** · 3900+ tests · CI: Python 3.11–3.13 on Linux + a Windows 3.13
100
+ smoke run · the only runtime dependency is **PyYAML** · **MIT**.</sub>
101
+
102
+ > 🧭 **Want it in plain words first?** What DOS is, what it catches, and what
103
+ > adopting it costs — no code: **[the plain-words version](#the-plain-words-version)**, just below.
104
+
105
+ > 🧭 **Or route yourself:** the page runs shallow → deep, and
106
+ > **[Who this is for](#who-this-is-for)** matches the question you brought to the
107
+ > section that answers it.
108
+
109
+ > **Reading this as an AI agent?** Start with **[AGENTS.md](https://github.com/anthony-chaudhary/dos-kernel/blob/master/AGENTS.md)** — a short
110
+ > orientation written for you: what DOS is in three lines, how to build/test/check
111
+ > your work, the ~5 files actually worth reading, and the architecture rules a
112
+ > change must satisfy.
113
+
114
+ > 🔤 **Five words the rest of this page leans on.** A **plan** is a named goal
115
+ > (`AUTH`); a **phase** is one shippable step of it (`AUTH1`); a **lane** is the
116
+ > slice of the file tree one agent may touch; the **oracle** is the part of DOS
117
+ > that reads the evidence and rules; a **stamp** is the mark a shipped phase
118
+ > leaves in a commit subject (`AUTH1: …`) — the thing the oracle greps for.
119
+ > That's the whole vocabulary.
120
+
121
+ <a id="who-this-is-for"></a>
122
+
123
+ ## Who this is for
124
+
125
+ This README runs shallow to deep — try it, see the failure it fixes, audit the
126
+ evidence, wire it in, extend it. You don't have to read it in that order. Find
127
+ the question you arrived with and jump; the rows route by the question, not
128
+ your job title, and every section hands off to the one above it.
129
+
130
+ | You're asking… | Start at | Then |
131
+ |---|---|---|
132
+ | *"What is this, in plain words, and why should my team care?"* | [the plain-words version](#the-plain-words-version), just below — no code | hand the [60-second demo](#try-it-in-60-seconds) to whoever runs your agents |
133
+ | *"Show me it working, fast."* | [Try it in 60 seconds](#try-it-in-60-seconds) | [what goes wrong in a fleet](#what-goes-wrong-in-a-fleet) without it |
134
+ | *"I already run agents — how do I wire the verdict into **my** stack?"* | [How you plug it in](#how-you-plug-it-in) | [the MCP lie detector](#give-your-agent-a-lie-detector-mcp) · [Install](#install) |
135
+ | *"I run a fleet every day — how do I watch it, triage it, debug it?"* | [Operating a fleet](#operating-a-fleet) | [Three live projections](#three-live-projections-read-only-tuis) · [Debug a stuck fleet](https://github.com/anthony-chaudhary/dos-kernel/blob/master/examples/playbooks/06_debug-a-stuck-fleet.md) |
136
+ | *"How do I bend it to my org without forking it?"* | [Hacking it](#hacking-it) | [docs/HACKING.md](https://github.com/anthony-chaudhary/dos-kernel/blob/master/docs/HACKING.md) — the seven extension axes |
137
+ | *"What is actually proven here — and can I re-run it?"* | [For researchers](#for-researchers) — claims → invariants → reproduction | [What's proven and what's still a bet](#whats-proven-and-whats-still-a-bet) · [Citation](#citation) |
138
+
139
+ (The seventh reader — an AI agent orienting itself in this repo — already has
140
+ its own front door: **[AGENTS.md](https://github.com/anthony-chaudhary/dos-kernel/blob/master/AGENTS.md)**, per the note above.)
141
+
142
+ ### The plain-words version
143
+
144
+ A coding agent does some work, then tells you how it went. Usually the story is
145
+ true. Sometimes it isn't — the cheerful *"all work completed!"* from a worker
146
+ that actually shipped nothing is the single most common failure in agent
147
+ fleets. With one agent you catch that yourself, because you read its work
148
+ before trusting it.
149
+
150
+ Run twenty agents at once and nobody reads everything. Each worker grades its
151
+ own homework, you believe the reports because what else is there to go on, and
152
+ the unchecked problems pile up quietly — a false "done" here, two agents
153
+ overwriting the same file there, one worker spinning in circles burning money.
154
+ None of it is loud. The codebase ends up *sorta* working, and nobody can safely
155
+ change it.
156
+
157
+ DOS is the referee. It's a small, deterministic program that never reads the
158
+ agent's story; it reads what actually happened — the commit, the file, the
159
+ clock — and hands you a verdict. An agent says "done"? DOS checks whether the
160
+ work really landed in your repo's history. An agent says "making progress"?
161
+ DOS checks whether anything real has changed. Two agents head for the same
162
+ files? DOS admits one and refuses the other, with a reason a machine can act
163
+ on. Every verdict is computed from artifacts the agent didn't author, so no
164
+ amount of confident narration can move it.
165
+
166
+ Nothing about it is coding-specific, and it imposes no framework. Your repo
167
+ declares its own rules — which file regions each agent may touch, how a
168
+ finished unit of work signals "done" — as data in one small config file, and
169
+ DOS supplies only the machinery. You reach it through small, do-one-thing
170
+ commands, through the agent host you already run, or straight from Python. And
171
+ it stays in its lane: it tells you reliably *what happened*, never whether the
172
+ committed code is *good* — quality stays with your tests, your reviews, and
173
+ you.
174
+
175
+ Adopting it costs one engineer about an afternoon: one small Python package
176
+ (one runtime dependency), one optional config file — and it works on day one
177
+ against a plain git repository with neither. If your team is about to go from
178
+ one agent to many, the missing piece is usually not a smarter agent. It's a
179
+ referee that doesn't believe any of them.
180
+
181
+ Convinced enough to watch it work? [Try it in 60 seconds](#try-it-in-60-seconds)
182
+ is one command — or hand this page to whoever runs your agents.
183
+
184
+ ## Try it in 60 seconds
185
+
186
+ Got a terminal? This runs the whole thing in a throwaway repo — one command
187
+ scaffolds it, makes a real commit, verifies it, and cleans up after itself:
188
+
189
+ ```bash
190
+ pip install dos-kernel # PyYAML is the only runtime dep
191
+ dos quickstart # → SHIPPED AUTH AUTH1 … then NOT_SHIPPED AUTH AUTH2
192
+ ```
193
+
194
+ One `SHIPPED`, one `NOT_SHIPPED`: the first is a claim git can back, the second
195
+ is a claim nothing landed for. That contrast is the product. The demo closes
196
+ with a router to wherever you already run agents — a Claude Code / Cursor tab
197
+ (`dos init --hooks`), an MCP host, a CI step, or a fleet — so your next move is
198
+ one line, not a docs dig. (Add `--keep ./demo` to keep the repo and poke at it.
199
+ Don't even want the install? `uvx --from dos-kernel dos quickstart` runs the
200
+ same demo ephemerally — nothing left behind.)
201
+
202
+ <details>
203
+ <summary><strong>Prefer to watch the gears turn?</strong> The same thing, by hand, in 5 lines — click to expand</summary>
204
+
205
+ A *plan* (`AUTH`) groups *phases* (`AUTH1`, `AUTH2`); `dos verify` takes
206
+ `<plan> <phase>`, and a commit whose subject starts `AUTH1:` is what stamps that
207
+ phase shipped.
208
+
209
+ ```bash
210
+ mkdir hello-dos && cd hello-dos
211
+ dos init . # writes one dos.toml
212
+ git init -q
213
+ git config user.email you@example.com # skip if you have a global git identity
214
+ git config user.name "You"
215
+ echo 'def login(): ...' > login.py
216
+ git add -A
217
+ git commit -m "AUTH1: ship the login endpoint" # stamp AUTH1 shipped: <PHASE-ID>: <message>
218
+
219
+ dos verify --workspace . AUTH AUTH1 # → SHIPPED AUTH AUTH1 <your-sha> (via grep-subject) exit 0
220
+ dos verify --workspace . AUTH AUTH2 # → NOT_SHIPPED AUTH AUTH2 (via none) exit 1
221
+ ```
222
+
223
+ An agent can claim `AUTH2` is done all day long; `verify` just reports what the
224
+ artifacts say — and they say it isn't. The `via grep-subject` / `via none` tag
225
+ tells you *how it knows*: it found the phase token in a commit subject, or it
226
+ found it nowhere. The full walkthrough is in
227
+ **[docs/QUICKSTART.md](https://github.com/anthony-chaudhary/dos-kernel/blob/master/docs/QUICKSTART.md)**.
228
+
229
+ </details>
230
+
231
+ <p align="center">
232
+ <img src="https://raw.githubusercontent.com/anthony-chaudhary/dos-kernel/master/examples/demo/verify-moment.svg" alt="The dos verify money-moment. Two equally-confident agent claims, checked against git. Left, what the agent claims (forgeable): 'Shipped AUTH1 — the login endpoint is done' and 'AUTH2 is done too — all work completed!'. Right, what git actually records: one real commit e389e8b 'AUTH1: ship the login endpoint', and no commit anywhere mentions AUTH2. The two verdicts: dos verify AUTH AUTH1 finds the token in a real commit subject → SHIPPED, exit 0, via grep-subject; dos verify AUTH AUTH2 finds it nowhere → NOT_SHIPPED, exit 1, via none. The confident AUTH2 claim collapses the instant no commit backs it." width="100%">
233
+ <br>
234
+ <sub><em>Two equally confident claims, one verdict each — <code>SHIPPED</code> for the one git can back, <code>NOT_SHIPPED</code> for the one nothing landed for. Every string is verbatim output of <a href="https://github.com/anthony-chaudhary/dos-kernel/blob/master/examples/demo/verify_demo.sh"><code>examples/demo/verify_demo.sh</code></a>. <a href="https://github.com/anthony-chaudhary/dos-kernel/blob/master/examples/demo/verify_visual.html">Step through it locally</a> for the click-through version (it's an HTML file — clone the repo and open it in a browser; GitHub shows its source, not the running page).</em></sub>
235
+ </p>
236
+
237
+ The smallest real win: in a CI step or dispatch loop, replace the line that
238
+ trusts an agent's "done" with `dos verify PLAN PHASE` and branch on its exit
239
+ code (`0` shipped / `1` not). No parsing, no plan, no config — the
240
+ [CI integration cookbook](https://github.com/anthony-chaudhary/dos-kernel/blob/master/examples/playbooks/cookbook-ci-integration.md) walks it
241
+ end-to-end. To run it on a repo shaped like yours, start with
242
+ [Onboard a repo in 10 minutes](https://github.com/anthony-chaudhary/dos-kernel/blob/master/examples/playbooks/01_onboard-a-repo.md).
243
+
244
+ *Next level up — wire the verdict into your own stack: [How you plug it in](#how-you-plug-it-in).*
245
+
246
+ ## What goes wrong in a fleet
247
+
248
+ Run a pile of agents at once with nobody refereeing, and here's how it goes:
249
+ each worker reports its own success, and you believe the reports, because what
250
+ else is there to go on? The unchecked problems pile up quietly — a lie here,
251
+ two agents clobbering the same file there, a little scope creep, one worker
252
+ spinning in circles — until the codebase *sorta* works and nobody can safely
253
+ change it.
254
+
255
+ The trouble is you launched the agents and then let them grade their own
256
+ homework. DOS gives you the missing signal — a verdict from ground truth — so
257
+ the loop closes. Here is the same fleet under both regimes:
258
+
259
+ <!-- Don't reference the diagram's left/right in prose. Mermaid decides where
260
+ disconnected subgraphs land (GitHub stacks them vertically), so a positional
261
+ caption is a claim about a render nobody verified — name the subgraph
262
+ titles instead; those travel with the boxes wherever the renderer puts
263
+ them. -->
264
+ <details open>
265
+ <summary>The two regimes as a flowchart — <strong>NO REFEREE:</strong> you believe the narration; <strong>DOS ADJUDICATES:</strong> you steer on a verdict</summary>
266
+
267
+ ```mermaid
268
+ flowchart LR
269
+ subgraph OPEN["NO REFEREE — you believe the narration"]
270
+ direction TB
271
+ A1["agent: 'done!'"] --> B1[["believed"]]
272
+ A2["agent: 'done!'"] --> B1
273
+ A3["agent: 'done!'"] --> B1
274
+ B1 --> C1["silent corruption piles up<br/>(lies · collisions · spin)"]
275
+ C1 --> D1["'sorta works' — can't be changed"]
276
+ end
277
+ subgraph CLOSED["DOS ADJUDICATES — you steer on a verdict"]
278
+ direction TB
279
+ A4["agent: 'done!'"] --> V{{"dos verify<br/>reads git"}}
280
+ V -->|in git ancestry| S["SHIPPED (exit 0)"]
281
+ V -->|found nowhere| N["NOT_SHIPPED (exit 1)"]
282
+ S --> L["land it"]
283
+ N --> R["re-dispatch / flag — caught"]
284
+ R -.verdict steers the loop.-> A4
285
+ end
286
+ ```
287
+
288
+ </details>
289
+
290
+ Here are the failures a fleet actually produces, each next to the ground truth
291
+ that quietly contradicts the worker's story — and the verdict DOS hands back:
292
+
293
+ | A worker… | …but the ground truth is | DOS verdict |
294
+ |---|---|---|
295
+ | says it shipped a unit of work | no commit ever landed | `verify` → **caught lie** |
296
+ | tried, but the commit silently failed | no commit ever landed | `verify` (the flake — indistinguishable from a lie *without* git) |
297
+ | edits files another worker owns | two agents, one shared file | `arbitrate` → **refuse** the second |
298
+ | overruns the file region it claimed | footprint reaches beyond the declared tree | `scope-gate` → **REFUSE** (before the write lands) |
299
+ | reports "making progress" | 0 commits, only a fresh heartbeat | `liveness` → **SPINNING** |
300
+
301
+ The first row is the most common one. The classic tell is a cheerful one-liner,
302
+ *"all work completed!"*, from a worker that did little or nothing. DOS never
303
+ reads that line; it reads the ground truth, so the claim collapses the instant
304
+ no artifact backs it (more in
305
+ [docs/108](https://github.com/anthony-chaudhary/dos-kernel/blob/master/docs/108_the-cheap-lie-and-the-narration-taxonomy.md)). That's also
306
+ what makes it cheap to adopt: `verify` needs no plan, no registry, no config,
307
+ and the exit code *is* the verdict — any shell or CI step can branch on it
308
+ without parsing a word.
309
+
310
+ <sub>*Prefer to watch it move?* The two loops are also a self-contained animation you
311
+ step through one frame at a time — clone the repo and open
312
+ [`docs/assets/loop_visual.html`](https://github.com/anthony-chaudhary/dos-kernel/blob/master/docs/assets/loop_visual.html) in a browser. (It's an
313
+ HTML file, so GitHub shows its source rather than running it — open it locally.)</sub>
314
+
315
+ ### How far you take it
316
+
317
+ It works on a plain `git init` with zero config, and gets smarter the more you
318
+ tell it. You don't adopt a framework and pick a tier; you start at the shallow
319
+ end and it keeps paying off as you wade deeper — the same kernel the whole way:
320
+
321
+ - **Zero config.** Point `dos verify PLAN PHASE` at a plain git
322
+ repo — no plan, no registry, no `dos.toml`. It answers from commit history
323
+ alone (`via grep-subject` / `via none`). This is the whole of
324
+ [QUICKSTART](https://github.com/anthony-chaudhary/dos-kernel/blob/master/docs/QUICKSTART.md) and the day-one CI win above.
325
+ - **Tell it your structure.** `dos init` writes a `dos.toml` (lanes, paths,
326
+ ship grammar as data); add a plan doc and `dos plan` lays each phase's
327
+ *claim* beside the oracle's verdict. Here's [exactly what a plan file looks
328
+ like](https://github.com/anthony-chaudhary/dos-kernel/blob/master/examples/plans/example-plan.md) (copyable, round-trips with the built-in
329
+ reader), and four worked [example workspaces](https://github.com/anthony-chaudhary/dos-kernel/tree/master/examples/workspaces).
330
+ - **Teach it your own types.** Declare your own block reasons, gate
331
+ verdicts, output renderers, admission predicates, a model-backed judge, a
332
+ custom plan dialect, or a whole host driver — all as workspace policy,
333
+ never a fork. The map is **[docs/HACKING.md](https://github.com/anthony-chaudhary/dos-kernel/blob/master/docs/HACKING.md)** (seven extension
334
+ axes) + the copy-me **[`examples/dos_ext/`](https://github.com/anthony-chaudhary/dos-kernel/tree/master/examples/dos_ext)**.
335
+
336
+ ### How you plug it in
337
+
338
+ That slope is how deep your config goes. The other axis is how you call the
339
+ referee at all — and you adopt through whichever surface matches how you
340
+ already work, not by restructuring your stack. The same kernel verdicts are
341
+ reachable through every row here, lowest-friction first:
342
+
343
+ | Surface | Adopt it when… | The move |
344
+ |---|---|---|
345
+ | **MCP server** | you drive an agent through an MCP host (Claude Desktop, Cursor, Cline, an Agent-SDK app) | add one line to the host config (`{ "command": "dos-mcp" }`) and ask the agent to `dos_verify` its own last claim — **zero code**. The *advisory* path (the agent asks). See [Give your agent a lie detector](#give-your-agent-a-lie-detector-mcp). |
346
+ | **Runtime hooks** | you run an agent loop (Claude Code, Cursor, Codex CLI, Gemini CLI) and want the verdict to *act*, not just be available | `dos init --hooks <runtime>` wires the verdict into that host's own hook config — a refused call is **denied before it runs**, a false "done" is **refused**. The *enforcement* path (the host denies). One command, no hand-edited YAML. See [QUICKSTART](https://github.com/anthony-chaudhary/dos-kernel/blob/master/docs/QUICKSTART.md) + [docs/221](https://github.com/anthony-chaudhary/dos-kernel/blob/master/docs/221_the-cross-vendor-hook-installer.md). |
347
+ | **CLI exit-code** | you have a shell pipeline or CI step that trusts an agent's "done" | replace that step with `dos verify PLAN PHASE` and branch on the exit code (`0` shipped / `1` not) — **the verdict *is* the exit code**. The day-one win above. |
348
+ | **Python API** | your dispatcher/orchestrator is already Python | `import dos` and call the pure syscalls (`dos.oracle.is_shipped`, `dos.arbiter.arbitrate`, …) — state-in / verdict-out, no subprocess. The [Python cookbook](https://github.com/anthony-chaudhary/dos-kernel/blob/master/examples/playbooks/cookbook-python-api.md). |
349
+ | **Fleet framework** | your fleet already runs on LangGraph, CrewAI, AutoGen, or the OpenAI/Claude Agents SDK | bolt the referee onto the framework's own seam — a referee node, a termination condition only git can satisfy, an output guardrail with a git tripwire. One function, no rewrite; every seam executed against the real framework. The [fleet-framework cookbook](https://github.com/anthony-chaudhary/dos-kernel/blob/master/examples/playbooks/cookbook-fleet-frameworks.md). |
350
+ | **Swarm runtime** | your agents run on **Hermes, OpenClaw**, or a SwarmClaw-style autonomous swarm — privileged tools, shared memory docs / task boards, and **no lock manager** for either | drop a two-function adapter into the tool-execution loop: `guard_action` refuses an arbitrary-exec command **before it runs**, and `acquire_lease` / `release_lease` bracket each shared-state write so the lost update never lands. No `import dos` — it shells the CLI; Hermes' `pre_tool_call` hook also speaks DOS natively (`dos hook pretool --dialect hermes`). The runnable, A/B-measured [Hermes / OpenClaw worked example](https://github.com/anthony-chaudhary/dos-kernel/tree/master/examples/hermes_integration) + [docs/278](https://github.com/anthony-chaudhary/dos-kernel/blob/master/docs/278_integrating-dos-with-hermes-and-openclaw-the-missing-lock-manager-for-agent-swarms.md). |
351
+ | **Skill pack** | you run agents in Claude Code and want the workflow, not just the verdict | `dos init --skills` drops editable `SKILL.md` screenplays that wire the syscalls into a snapshot → audit → gate → take-a-lane loop. See [QUICKSTART §2](https://github.com/anthony-chaudhary/dos-kernel/blob/master/docs/QUICKSTART.md). |
352
+ | **Driver** | your lanes must be *computed*, or you add a provider-backed judge | write one `dos/drivers/<host>.py` (a `LaneTaxonomy` + a config factory), loaded by name, never imported by the kernel. The map is [HACKING.md](https://github.com/anthony-chaudhary/dos-kernel/blob/master/docs/HACKING.md). |
353
+
354
+ The two axes are independent: a zero-config repo can adopt through any surface,
355
+ and a deeply-configured one still answers over the same CLI and MCP tools.
356
+ Start at the top row — it's the one that costs nothing to try. The first two
357
+ rows also compose: MCP advises (the agent checks its own work), hooks enforce
358
+ (the host stops a bad action) — wire both for the full loop.
359
+
360
+ Those surfaces are the upstream half of the value chain — who calls the
361
+ referee. The same verdicts also flow downstream, to the systems that act on
362
+ them: every adjudication lands in a verdict journal that `dos export` drains to
363
+ your observability stack (Datadog / Honeycomb / Grafana —
364
+ [docs/266](https://github.com/anthony-chaudhary/dos-kernel/blob/master/docs/266_the-verdict-exporter-shipping-the-journal-to-where-dashboards-live.md)),
365
+ `dos notify` pushes what-needs-a-human to Slack, `dos reward` gates what a
366
+ fine-tune may train on, and `dos attest` mints a signed receipt a skeptic can
367
+ check without loop access
368
+ ([docs/246](https://github.com/anthony-chaudhary/dos-kernel/blob/master/docs/246_dos-attest-the-portable-signed-receipt.md)). One kernel, one
369
+ verdict vocabulary, from the agent's tool call to your dashboard.
370
+
371
+ *Next level up — run it every day: [Operating a fleet](#operating-a-fleet).*
372
+
373
+ ## Why not just run N agents?
374
+
375
+ Fair question — why add a referee at all? Because N agents with no referee is
376
+ that open loop again: you launch them, they self-report, and you've got nothing
377
+ solid to steer on. DOS hands you that missing signal. Specifically, it gives
378
+ you **sensors** —
379
+
380
+ - `verify` — did it really ship? (from git, not the agent's word)
381
+ - `liveness` — is it ADVANCING, or just SPINNING / STALLED?
382
+ - `scope-gate` — did it stay in its lane? A binding pre-effect gate
383
+ (`dos scope-gate`, ALLOW/REFUSE, exit 0/5/6) over the same `dos.scope`
384
+ classifier that also reports post-hoc.
385
+
386
+ — and **actuators**: `arbitrate` (let this lane in, or refuse the collision) and
387
+ `refuse` (say no with a reason a machine can act on). Together they turn a pile
388
+ of workers into something you can actually drive. The kernel's job is the
389
+ signal, but it also ships a reference supervisor to show what you do with it:
390
+ `dos watch` checks `liveness` on each tracked run and *proposes* a halt when one
391
+ spins or blows its budget — it recommends, it never pulls the trigger — and
392
+ `dos loop` keeps N dispatch-loops alive. Use those, or build your own on the
393
+ same signal. Either way, it's the difference between *"I launched 20 sessions
394
+ and I'm hoping"* and *"I can see which two are lying and which one is wedged."*
395
+
396
+ You see that signal through three read-only screens — `dos top` (what's
397
+ running), `dos decisions` (what's waiting on you), `dos plan` (claim vs. ground
398
+ truth) — covered in [Three live projections](#three-live-projections-read-only-tuis)
399
+ below and walked end-to-end in
400
+ **[Debug a stuck fleet](https://github.com/anthony-chaudhary/dos-kernel/blob/master/examples/playbooks/06_debug-a-stuck-fleet.md)**.
401
+
402
+ The referee grows along two axes: deterministic *verdicts* that read artifacts
403
+ (`verify`, `liveness`, `scope`), and provider-backed *judges* — a model, a
404
+ debate — that rule on what no deterministic check can, kept outside the kernel
405
+ under a discipline that stops a wrong judge from clearing a falsehood. See
406
+ **[the adjudicator-population note](https://github.com/anthony-chaudhary/dos-kernel/blob/master/docs/88_the-adjudicator-population.md)** for
407
+ that scalable-oversight story in code.
408
+
409
+ > **We caught ourselves doing the exact thing DOS exists to catch.** A design doc
410
+ > in this repo included a small worked example — "here's what this snippet prints" —
411
+ > written by the agent building DOS. It read perfectly plausible. It was reviewed. It
412
+ > was committed. And it was wrong, for the dullest possible reason: *nobody had
413
+ > actually run it.* The agent had reasoned out what the code "would" print and typed
414
+ > that down as fact. An adversarial review later did the one thing the author hadn't
415
+ > — executed the snippet — and the real output flatly contradicted the prose.
416
+ > That's the whole thesis in one anecdote: a confident narration is not evidence,
417
+ > even when the narrator is us, even after a human reviewed it. The reasoning felt
418
+ > like checking; it wasn't. The only thing that settled it was running the code and
419
+ > reading what came back — an independent witness, exactly the move `verify` makes
420
+ > against an agent's "done." The correction is pinned in git (`docs/124`, commit
421
+ > `651ba03`), because here too the record is the commit, not the claim.
422
+
423
+ > **And the first issue ever filed on this repo was closed the same way.**
424
+ > [Issue #1](https://github.com/anthony-chaudhary/dos-kernel/issues/1) is the
425
+ > publish pipeline's TestPyPI rehearsal failing its OIDC token exchange
426
+ > (`invalid-publisher`). The bug is ordinary; the closure is the demo. It wasn't
427
+ > closed on "fixed it" narration — it was closed on two read-backs the claimant
428
+ > didn't author: the next pipeline run's own conclusion
429
+ > ([the dry-run leg, green](https://github.com/anthony-chaudhary/dos-kernel/actions/runs/27309748423))
430
+ > and [the registry's own JSON](https://test.pypi.org/pypi/dos-kernel/json)
431
+ > reporting the artifact that leg exists to land. The closing comment runs the
432
+ > kernel's verdict on itself — `dos reward --claim --witness confirm` →
433
+ > **ACCEPT** — and the same evening, the same pipeline's witness gate
434
+ > [refused to publish release 0.23.0](https://github.com/anthony-chaudhary/dos-kernel/actions/runs/27310760144)
435
+ > because CI was red on the candidate commit: a release pipeline declining to
436
+ > believe an unwitnessed "ready." Every link is public — click the runs, read
437
+ > the registry JSON, audit the closure yourself.
438
+
439
+ ## What's proven and what's still a bet
440
+
441
+ We apply the same honesty to our own claims that the kernel applies to your
442
+ agents. It would be easy to lead with one big number; instead, here's the
443
+ split — what we actually measured, what we extrapolated from those
444
+ measurements, and what is still a bet. Draw the line yourself. (Every *proven*
445
+ number is from a live, re-runnable benchmark written up under
446
+ [`benchmark/`](https://github.com/anthony-chaudhary/dos-kernel/tree/master/benchmark) and the paper.)
447
+
448
+ **✅ Proven — measured in live runs, scored against a fact the agent can't fake**
449
+ (a test environment's database state, git history — bytes the agent wrote none of):
450
+
451
+ - **It catches the lie and blocks it.** Across 120 clean tasks on a standard
452
+ agent benchmark, a DOS gate caught 10 genuine "I shipped it" lies and let
453
+ every honest write through — at the same 8.3% catch rate on both a mid-size
454
+ and a top-tier model. The signal doesn't fade when you upgrade the model.
455
+ (Over the full benchmark: 15 lies caught in 258 tasks, two models, zero false
456
+ alarms.) *(▶ the catch itself is the [gate figure below](#the-two-money-moments-rendered).)*
457
+ - **It prevents the collision.** The same referee put two live agents on one
458
+ shared record and stopped 6 of 8 cases of one silently overwriting the other
459
+ — 4 of 6 when the cases were drawn from the real task mix. This is the half a
460
+ sandbox *can't* cover: an isolated workspace still shares the outside world.
461
+ *(▶ the collision being prevented is the [coordination figure below](#the-two-money-moments-rendered).)*
462
+ - **Mid-run "fixes" don't help; quitting a doomed run does.** Every active fix
463
+ we tried mid-run (warn it, rewind it, inject a hint) came out flat-to-negative
464
+ — poking a run also disturbs the ones that would have passed. The one move
465
+ that helps writes nothing: give up at the right moment — 0 runs wrongly
466
+ killed out of 1,634 winners across 22 models, ~11% of fleet compute saved.
467
+ - **The training label can't be gamed.** For "may a fine-tune learn from this
468
+ run?" (`dos reward`), the yes/no is computed from environment state the agent
469
+ authored none of — so no amount of clever output text can flip a *no* to a
470
+ *yes*. That's a proof, plus a measured 60% → 100% precision lift from
471
+ filtering out the poison a naive self-graded collector would have kept.
472
+
473
+ <a id="the-two-money-moments-rendered"></a>
474
+
475
+ The two proven moments above, each rendered as a single figure from its own live
476
+ run (every number, hash, and ID is a verbatim read-off — never a hand-typed
477
+ dramatization):
478
+
479
+ <p align="center">
480
+ <img src="https://raw.githubusercontent.com/anthony-chaudhary/dos-kernel/master/benchmark/agentprocessbench/writeadmit/gate-moment.svg" alt="The DOS write-admission gate catching a real over-claim. A live gemini-2.5-pro agent on a tau2 airline task reports 'You are all set! Your reservation number is HATHAT' — a confident write the agent authored. The witness is the environment DB-hash the agent wrote zero bytes of: gold hash 9f2c…gold vs the agent's resulting hash 4b7e…actual, so db_match = False — the booking it swore it made is not in the database. The gate verdict: a confident write REFUTED by an OS_RECORDED witness → GATE BLOCK, the phantom never reaches the next agent. Result across two models: J = 10 of 120 over-claims caught and blocked off the DB-hash, 9 of 9 honest writes admitted, zero correct work blocked, an identical 8.3% over-claim rate on the mid model and the strong one." width="100%">
481
+ <br>
482
+ <sub><em><strong>It catches the lie and blocks it.</strong> A confident booking, refuted by the DB-hash the agent couldn't author, blocked before a downstream agent inherits the phantom. <a href="https://github.com/anthony-chaudhary/dos-kernel/blob/master/benchmark/agentprocessbench/writeadmit/gate_visual.html">Step through it locally</a> (an HTML walkthrough — clone and open in a browser; GitHub shows its source).</em></sub>
483
+ </p>
484
+
485
+ <p align="center">
486
+ <img src="https://raw.githubusercontent.com/anthony-chaudhary/dos-kernel/master/benchmark/agentprocessbench/writeadmit/f2-moment.svg" alt="The DOS coordination payoff: a stale write clobbering a cancellation, then prevented. Two live agents act on one shared reservation NM1VX1, each having planned its tool-calls against the same original state, neither aware of the other. A1 cancels the reservation (DB-hash a3f1…afterA1). Under naive replay, A2's add-bag — computed on the original active state — blindly re-activates the reservation and adds a bag, silently overwriting A1's cancellation (composed hash 77c2…naive, a real lost update). Under the arbiter, dos.arbiter leases the region reservations/NM1VX1 to A1, refuses A2's overlapping lease, and A2 re-plans against the post-A1 cancelled state and correctly declines — the DB-hash matches the serialized-correct value and no update is lost. Across six natural conflict pairs drawn from the real task distribution, J = 4 of 6 clobbers were structurally prevented off the DB-hash." width="100%">
487
+ <br>
488
+ <sub><em><strong>It prevents the collision.</strong> A stale add-bag clobbers a cancellation under naive replay; the arbiter serializes the two agents on the same region so neither overwrites the other. <a href="https://github.com/anthony-chaudhary/dos-kernel/blob/master/benchmark/agentprocessbench/writeadmit/f2_visual.html">Step through it locally</a> (an HTML walkthrough — clone and open in a browser).</em></sub>
489
+ </p>
490
+
491
+ **📈 Projected — real measurements, composed into a curve (and labelled as one).**
492
+ Here's the crux: catching a lie is only worth something to whoever can't catch
493
+ it themselves. Hand the verdict to one strong agent that re-checks its own
494
+ inputs and it buys you almost nothing — that agent recovers on its own. Hand it
495
+ to something that *can't* re-check — a non-LLM system, a weaker model, a long
496
+ multi-step chain, or a training loop — and it pays off (up to a full +1.0 in
497
+ our no-recovery upper bound). In short: DOS is worth more the less your
498
+ downstream can check itself. Our fleet-scale figure (≈173–505 corrupted results
499
+ prevented at a 32-agent fleet) projects these real per-run rates onto fleet
500
+ math — it's geometry on top of measured numbers, not a measured fleet run.
501
+
502
+ **🎲 A bet — stated as one.** Where this goes if the floor holds: a frozen,
503
+ cross-vendor trust standard (the "deny" message is already byte-identical
504
+ across Claude Code, Codex, and Qwen — a de-facto standard waiting to be named),
505
+ a shared arbiter for real-world effects, the claim-vs-reality corpus only a
506
+ neutral party can hold, and a notary that proves what an agent did *to a
507
+ skeptic who wasn't in the room* (the mechanism already ships — `dos attest`
508
+ mints an HMAC-signed receipt over an effect-witness verdict and
509
+ `dos verify-receipt` checks it with the shared key alone;
510
+ [docs/246](https://github.com/anthony-chaudhary/dos-kernel/blob/master/docs/246_dos-attest-the-portable-signed-receipt.md)). The seeds are
511
+ in the tree; we claim no results for any of it.
512
+
513
+ > **The one distinction that keeps this honest:** a **J** is a *count of failures
514
+ > blocked off ground truth* — never a downstream outcome delta. "Blocked 10 real
515
+ > over-claims" is proven; "made the fleet 10% better" is not the same sentence,
516
+ > and we don't write it.
517
+
518
+ ## What DOS does *not* do
519
+
520
+ The proven/bet gradient above is about *evidence*; this is about *capability* —
521
+ the boundaries are part of the contract, and stating them is the same honesty
522
+ the kernel applies to your agents:
523
+
524
+ - **It adjudicates that a ship *happened*, not that the code is correct or good.**
525
+ `verify` reads git ancestry, so it catches "no commit landed," not "the
526
+ committed work is wrong." Judging *quality* is the JUDGE / HUMAN rung, not the
527
+ deterministic oracle.
528
+ - **It computes verdicts and admission decisions; it never spawns or kills an OS
529
+ process.** `liveness` is advisory — it *reports* SPINNING, it doesn't stop the
530
+ run — and `dos loop` *emits* a spawn/reap/flag plan you act on. (`arbitrate` and
531
+ `refuse` are decisions you enforce, not force the kernel applies.)
532
+ - **It is not a CI replacement or a test runner.** It sits *beside* them and lets a
533
+ step branch on the exit-code verdict.
534
+ - **The pluggable verdict/JUDGE adjudicator *registry* is specced, not yet
535
+ shipped** (see [docs/88](https://github.com/anthony-chaudhary/dos-kernel/blob/master/docs/88_the-adjudicator-population.md) §5); the JUDGE
536
+ *seam* and built-in judges are.
537
+
538
+ ## Give your agent a lie detector (MCP)
539
+
540
+ The easiest way in doesn't involve writing any Python. Point the agent host you
541
+ already use at the bundled MCP server, then ask your agent to `dos_verify` its
542
+ own last claim. The first time it comes back `NOT_SHIPPED … (via none)` on work
543
+ the agent *swore* it finished, you'll see why this repo exists — in your
544
+ terminal, on your fleet.
545
+
546
+ Installed with the `[mcp]` extra (`pip install -e ".[mcp]"` from your clone — see
547
+ [Install](#install)), DOS exposes the syscalls as MCP tools — the truth tools
548
+ first (`dos_verify` "did it ship?", `dos_commit_audit` "does this commit's claim
549
+ match its diff?", `dos_status` one folded fact about a run), then
550
+ `dos_arbitrate` (may two workers run without colliding?), the structured-refusal
551
+ pair (`dos_refuse_reasons` / `dos_check_reason`), `dos_recall` (is this recalled
552
+ memory still true?), and `dos_doctor` (the workspace report) — so any
553
+ MCP-speaking host — Claude Desktop, Cursor, Cline, Trae, an Agent-SDK app — can
554
+ call the referee over JSON-on-stdio with zero Python coupling. Each verdict comes
555
+ back with a one-line interpretation of what it means for the agent's next move.
556
+ (See **[the MCP server surface](https://github.com/anthony-chaudhary/dos-kernel/blob/master/docs/80_mcp-server-surface.md)**.)
557
+
558
+ ```jsonc
559
+ // claude_desktop_config.json — paste, restart, then say:
560
+ // "use dos_verify to confirm you actually shipped that"
561
+ { "mcpServers": { "dos": { "command": "dos-mcp" } } }
562
+ ```
563
+
564
+ The MCP server is **advisory**: the agent *calls* the referee when it (or you)
565
+ thinks to. The per-host wiring for Cursor / Codex / Gemini is in
566
+ **[the MCP README](https://github.com/anthony-chaudhary/dos-kernel/blob/master/src/dos_mcp/README.md)** — all four are MCP clients, so this
567
+ works on every one of them with zero code.
568
+
569
+ ### …then make the verdict *act* (hooks)
570
+
571
+ To go from "the agent can ask" to "the host won't let a bad call through", wire
572
+ DOS's hooks into the runtime you actually run. One command per host — it writes
573
+ that host's own hook-config file, merged into anything already there:
574
+
575
+ ```bash
576
+ dos init --hooks claude-code . # .claude/settings.json
577
+ dos init --hooks cursor . # .cursor/hooks.json
578
+ dos init --hooks codex . # .codex/config.toml
579
+ dos init --hooks gemini . # .gemini/settings.json
580
+ dos init --hooks antigravity . # .agents/hooks.json
581
+ ```
582
+
583
+ That binds three shipped hooks: `pretool` denies a structurally-refused call
584
+ before it runs, `stop` refuses a stop on an unverified "done," `posttool`
585
+ re-surfaces a stalled stream. This is the **enforcement** path (the *host*
586
+ denies on a DOS verdict) — the complement to MCP's advisory path. Until
587
+ recently this spoke only Claude Code; it now installs across five hosts —
588
+ Claude Code, Cursor, Codex, Gemini, and Antigravity
589
+ ([docs/221](https://github.com/anthony-chaudhary/dos-kernel/blob/master/docs/221_the-cross-vendor-hook-installer.md),
590
+ [docs/269](https://github.com/anthony-chaudhary/dos-kernel/blob/master/docs/269_antigravity-the-fifth-host.md)).
591
+ `--with-hooks` is the back-compat alias for `--hooks claude-code`.
592
+
593
+ Under the installer sits a pluggable dialect seam: the verdict is decided
594
+ once, then rendered into whatever JSON shape the host parses
595
+ ([docs/217](https://github.com/anthony-chaudhary/dos-kernel/blob/master/docs/217_the-cross-vendor-hook-dialect-seam.md)) — so a runtime the
596
+ installer doesn't cover yet can still consume the same hooks. A sixth shipped
597
+ dialect speaks **Hermes**: `dos hook pretool --dialect hermes` emits the
598
+ `{"decision": "block", "reason": …}` object Hermes' `pre_tool_call` shell hook
599
+ reads (wire it in `cli-config.yaml`). A new host's dialect is a driver, never a
600
+ kernel edit.
601
+
602
+ The flip side of that honesty: a host with **no** hook seam gets **no** dialect.
603
+ ByteDance's **Trae** was proved out and ships no user-scriptable hook system in
604
+ its personal/international editions (no lifecycle events, no deny/allow stdout
605
+ contract; its CN-enterprise edition announced one on 2026-06-09 with no
606
+ published grammar yet), so DOS binds to it advisory-only — the MCP server in
607
+ `.trae/mcp.json` (read alike by IDE-mode Agent, SOLO mode, and TRAE CLI), a
608
+ verify-before-"done" rule in `.trae/rules/project_rules.md`, the generic
609
+ skills in `.trae/skills/` — and `dos init --hooks trae` fails loud rather than
610
+ writing config Trae would never read
611
+ ([docs/294](https://github.com/anthony-chaudhary/dos-kernel/blob/master/docs/294_trae-advisory-only-the-host-with-no-hook-seam.md)).
612
+ An invented envelope would be fake enforcement, which is the exact failure the
613
+ dialect seam exists to prevent.
614
+
615
+ Because these hooks run on *every* tool call, the core kernel logic on the hot
616
+ path is reimplemented in native Go — a `dos-hook` binary that ports the actual
617
+ decision predicates (the conjunctive-only lease-admission and
618
+ prefix-disjointness floor, the `verify()` grep rung, self-modify, the marker
619
+ budget, the WAL) rather than just shelling out to Python. It serves the
620
+ per-call verdict in ~10 ms — 16–43× faster than shelling
621
+ `python -m dos.cli hook …` (~0.25–0.8 s, dominated by interpreter cold-start) —
622
+ and is byte-identical to the Python kernel on the gated decision (the docs/124
623
+ parity contract, pinned by Go parity tests). It owns the common fast path and
624
+ falls back to the always-available Python verb for anything it doesn't yet
625
+ serve, so a machine without the binary degrades cleanly with no wiring change
626
+ ([docs/125](https://github.com/anthony-chaudhary/dos-kernel/blob/master/docs/125_go-hook-fastpath-build-plan.md),
627
+ [docs/270](https://github.com/anthony-chaudhary/dos-kernel/blob/master/docs/270_go-hook-fastpath-benchmarks.md)). You don't build it
628
+ yourself: the per-platform wheels bundle the binary, so a wheel install gets
629
+ the native fast path with no Go toolchain — and any platform without a bundled
630
+ binary (including a plain source install) just runs the pure-Python path
631
+ ([docs/286](https://github.com/anthony-chaudhary/dos-kernel/blob/master/docs/286_shipping-the-go-binary-through-pypi-per-platform-wheels.md)).
632
+
633
+ *Next level up — what to watch once a fleet runs through these hooks: [Operating a fleet](#operating-a-fleet).*
634
+
635
+ <a id="the-verbs-by-the-question-they-answer"></a>
636
+
637
+ ## The syscall ABI
638
+
639
+ Every syscall answers a question you'd otherwise have to *take the agent's word
640
+ for*. "Reach for this when…" is the plain-English trigger; the rest is the
641
+ contract — and the module names are auditable.
642
+
643
+ | Syscall | Reach for this when… | What it is | Module |
644
+ |---|---|---|---|
645
+ | `verify()` | an agent says a unit of work is **done** and you don't want to take its word | the **truth syscall** — "did (plan, phase) actually ship?" registry-first, ancestry-checked, from git history if there's no plan at all | `dos.oracle`, `dos.phase_shipped` |
646
+ | `liveness()` | a long run says it's **"making progress"** and you want to know if it actually is | the **temporal verdict** — "is the run ADVANCING, or just SPINNING / STALLED?" from the git/journal delta and the clock | `dos.liveness` |
647
+ | `verify-result()` | a **subagent hands a result back** to an orchestrator that folds it as a finding — but the result string may be a harness-synthesized error the worker never authored | the **fold-site result-state witness** ([docs/197](https://github.com/anthony-chaudhary/dos-kernel/blob/master/docs/197_how-dos-is-directly-useful-to-ultracode.md)) — classifies a subagent transcript's terminal record, gating on `message.model == "<synthetic>"` (the unforgeable harness-authorship marker), never the agent's self-report; **exit 3 = DEAD** (a harness 429 / quota / auth / server error), `0` = HEALTHY / UNREADABLE | `dos.result_state` |
648
+ | `resume()` | a run **died or paused mid-flight** and you need to continue without re-doing work or double-applying it | the **third ARIES phase** — "how far did the *fossils* say it got, and what's the residual?" over a run-id-keyed intent ledger; re-enters from a git-VERIFIED SHA, never the dead run's self-report (RESUMABLE / COMPLETE / DIVERGED / UNRESUMABLE) | `dos.resume`, `dos.intent_ledger` |
649
+ | `complete()` | you need to know if the **whole declared job** is verifiably done, not just one phase | the **completion verdict** — `residual = declared − verified`, asked forward; read-only, never self-certifies | `dos.completion` |
650
+ | `rewind()` | a run thrashed and you want to **excise the dead-end turns** without the kernel authoring a correction | the **conversation-rewind verdict** — replays the ledger for a minted checkpoint and PROPOSES the excision (never truncates; the host owns the transcript) | `dos.rewind` |
651
+ | `productivity()` | a long run is burning turns and you want to know if it's **still doing work, or fading** | the **loop-economics verdict** ([docs/218](https://github.com/anthony-chaudhary/dos-kernel/blob/master/docs/218_the-productivity-verdict-diminishing-returns-as-a-syscall.md)) — `classify(work-deltas) -> PRODUCTIVE / DIMINISHING / STALLED` over a trend of per-step work; pure, no I/O | `dos.productivity` |
652
+ | `efficiency()` | you want to know if the **tokens a run spent actually bought work** (a run can be productive yet burn 10× its work's worth) | the **token-effectiveness verdict** ([docs/263](https://github.com/anthony-chaudhary/dos-kernel/blob/master/docs/263_token-effectiveness-verdict-plan.md)) — `work / tokens -> EFFICIENT / COSTLY / WASTEFUL`; both counts are env-authored, so a run can't narrate its way to EFFICIENT | `dos.efficiency` |
653
+ | `improve()` | a **self-improving loop** proposes a change to its own code and you must decide **keep or revert** — without trusting the loop's own claim that it helped | the **keep-gate** ([docs/280](https://github.com/anthony-chaudhary/dos-kernel/blob/master/docs/280_the-self-improving-work-loop-the-kernel-adjudicates-its-own-improvement.md)) — `KEEP / REVERT / ESCALATE` from witnesses the candidate's author didn't write: the suite green on the candidate-only tree, the truth syscall clean, and a strictly-measured metric gain; a regression always REVERTs, a run of non-keeps ESCALATEs to a human | `dos.improve` |
654
+ | `reward()` | a fine-tune is about to **train on an agent's trajectory** and the "it worked" label came from the agent itself | the **reward-set admission verdict** ([docs/230](https://github.com/anthony-chaudhary/dos-kernel/blob/master/docs/230_the-lab-facing-twin-rlvr-admit-the-non-distillable-reward-label.md)) — `ACCEPT / REJECT_POISON / ABSTAIN` off a witness the agent authored zero bytes of, so no answer text can flip a reject to an accept (the non-distillable label) | `dos.reward` |
655
+ | `breaker()` | a **failure class keeps tripping** and you want to stop retrying and escalate | the **circuit-breaker primitive** ([docs/223](https://github.com/anthony-chaudhary/dos-kernel/blob/master/docs/223_the-circuit-breaker-primitive-failure-counting-as-mechanism.md)) — a pure two-counter state machine, `CLOSED / OPEN`, tripping on consecutive *or* total failures; an OPEN verdict names the escalation rung (none / judge / human) | `dos.breaker` |
656
+ | `hook_exit()` / `exec_capability()` | you wire a **plain shell hook** into a runtime, or need to know if a command **grants arbitrary code execution** | two classifier leaves the cheapest integrations consult — `hook_exit` maps an exit code to an intervention ([docs/226](https://github.com/anthony-chaudhary/dos-kernel/blob/master/docs/226_the-hook-exit-classifier-a-shell-scripts-exit-code-as-a-verdict.md): 0 pass / 2 BLOCK / other WARN), `exec_capability` classifies the *invoked program token* — never a substring — as `GRANTS_ARBITRARY_EXEC / BOUNDED` ([docs/224](https://github.com/anthony-chaudhary/dos-kernel/blob/master/docs/224_the-exec-capability-classifier-a-shape-not-a-word.md)) | `dos.hook_exit`, `dos.exec_capability` |
657
+ | `refuse(reason)` | you need to say **why** a pick was blocked in a way a machine can act on | **structured refusal** — a closed, declared reason vocabulary (`dos.reasons`, extensible per-workspace), every reason emittable, verifiable, and refusable | `dos.wedge_reason`, `dos.picker_oracle` |
658
+ | `lease()` / `arbitrate()` | two agents might **touch the same files** and you need to admit one without a collision | the **pure admission kernel** — `arbitrate(request, live_leases, config) -> decision`, state-in / decision-out, no I/O | `dos.arbiter` |
659
+ | `spawn()` / `reap()` | you need every run to carry a **traceable identity** and its effects to be replayable | the **correlation spine** (sortable, lineage-carrying run-ids) + the lease **write-ahead log** | `dos.run_id`, `dos.lane_journal` |
660
+ | `enumerate()` / `pickable()` / `cooldown()` / `reconcile()` | an unattended loop must know **is there anything pickable, why-not, have I tried it, and did the claim hold?** — without re-storming a known drain or believing a "done" the git can't confirm | the **picker substrate** ([docs/207](https://github.com/anthony-chaudhary/dos-kernel/blob/master/docs/207_dispatch-workflow-extraction-and-the-pickable-substrate-completion.md)) — `enumerate` is the phase-list producer (the `declared` set, never a silent empty); `pickable` the pre-dispatch gate (OFFERABLE / HELD(reason)); `cooldown` the anti-churn fold over pick-attempts (CLEAR / RECENTLY_ATTEMPTED); `reconcile` the quiet-completion join (VERIFIED / QUIET_INCOMPLETE / HONEST_OPEN, fail-closed on the claim) | `dos.enumerate`, `dos.pickable`, `dos.cooldown`, `dos.reconcile` |
661
+
662
+ > Three terms the table assumes: a **plan** (e.g. `AUTH`) groups **phases** —
663
+ > a phase is a named unit of work (e.g. `AUTH1`); a **lane** is a leased region of
664
+ > the file tree an agent works in. All are defined in the
665
+ > [quickstart](https://github.com/anthony-chaudhary/dos-kernel/blob/master/docs/QUICKSTART.md).
666
+
667
+ > **The newest catch — a result that *died*.** When a subagent hands a result
668
+ > back to an orchestrator that folds it as a finding (an ultracode `Workflow`, an
669
+ > Agent-SDK fan-out), the result string itself may be a **harness-synthesized
670
+ > error** the worker never authored — and ~32% of real subagents return exactly
671
+ > that (a 429 / quota / auth string) where the fold expects a finding ([docs/197](https://github.com/anthony-chaudhary/dos-kernel/blob/master/docs/197_how-dos-is-directly-useful-to-ultracode.md)).
672
+ > `verify-result` reads the transcript's terminal record and refuses to believe a
673
+ > harness-authored death:
674
+ >
675
+ > ```bash
676
+ > dos verify-result --transcript dead.jsonl
677
+ > # DEAD SYNTHETIC class=OTHER — harness-authored terminal
678
+ > # (model=<synthetic> + stop_reason=stop_sequence) — not a finding; route to DEAD, do not fold
679
+ > echo $? # → 3 (count it in the denominator; never bank it as a result)
680
+ >
681
+ > dos verify-result --transcript real.jsonl
682
+ > # HEALTHY — terminal assistant record is real-model authored with content
683
+ > echo $? # → 0
684
+ > ```
685
+ >
686
+ > It gates on `message.model == "<synthetic>"` — the marker the agent's own model
687
+ > *cannot forge* (the runtime harness authored those bytes, not the worker) — which
688
+ > is broader than rate-limits alone: quota, auth, and server deaths are caught too.
689
+
690
+ Around these sit ~30 supporting kernel modules — the file-tree disjointness
691
+ algebra, the timeline reader, the gate/loop classifiers, the typed-verdict
692
+ contract, the JUDGE-rung seam. The full map is in **[CLAUDE.md](https://github.com/anthony-chaudhary/dos-kernel/blob/master/CLAUDE.md)**.
693
+
694
+ ## Install
695
+
696
+ Pick the row that matches how you work — the full matrix (every OS, every
697
+ channel, upgrade/uninstall, WSL, troubleshooting) is in
698
+ **[docs/INSTALL.md](https://github.com/anthony-chaudhary/dos-kernel/blob/master/docs/INSTALL.md)**:
699
+
700
+ ```bash
701
+ # pip — the default (the line the 60-second demo ran; also how a host pins it):
702
+ pip install dos-kernel # core kernel (PyYAML only)
703
+ pip install "dos-kernel[mcp]" # + the MCP server (dos-mcp)
704
+
705
+ # uv — the isolated CLI install (keeps `dos` + `dos-mcp` off your project venv):
706
+ uv tool install dos-kernel # `dos` + `dos-mcp` on PATH
707
+ uvx --from dos-kernel dos doctor # or run it once, ephemerally
708
+
709
+ # from a clone — editable, the contributor path (tracking unreleased master:
710
+ # pip install "dos-kernel @ git+https://github.com/anthony-chaudhary/dos-kernel", no clone needed):
711
+ git clone https://github.com/anthony-chaudhary/dos-kernel.git && cd dos-kernel
712
+ pip install -e . # editable: your edits are live in the install
713
+ ./install.sh # or .\install.ps1 on Windows — venv + install + PATH, one line
714
+ ```
715
+
716
+ > **The distribution name is `dos-kernel`, not `dos`** — a bare `pip install dos`
717
+ > pulls an unrelated package that squats the name. The *import* name and the CLI
718
+ > are still `dos`. The core kernel's only runtime dependency is PyYAML (the
719
+ > `[mcp]` extra adds the MCP framework; `[tui]` adds the live `dos top` screens).
720
+ > See [SECURITY.md](https://github.com/anthony-chaudhary/dos-kernel/blob/master/SECURITY.md), "Supply chain."
721
+
722
+ `pip install dos-kernel` is the whole install — if it worked in the demo,
723
+ you're done here. The other rows exist for how *your* team works: **uv** if you
724
+ want the CLI isolated from your project venv (faster than `pipx`, manages
725
+ Python versions; `pipx install dos-kernel` works the same way), the clone if
726
+ you're contributing. Homebrew / WinGet / Scoop one-liners are next on the
727
+ release runway (see [docs/INSTALL.md](https://github.com/anthony-chaudhary/dos-kernel/blob/master/docs/INSTALL.md)).
728
+
729
+ A host repo adds DOS as a pinned dependency and points it at its own tree — never
730
+ by vendoring the code in. DOS is stateless about which repo it serves: it
731
+ resolves the workspace from `--workspace` › `$DISPATCH_WORKSPACE` › cwd, never
732
+ its own install location, so the ground truth stays legible as the codebase
733
+ grows. (The full separation contract — mechanism in the package, policy in the
734
+ workspace's `dos.toml` — is in **[CLAUDE.md](https://github.com/anthony-chaudhary/dos-kernel/blob/master/CLAUDE.md)**.)
735
+
736
+ For most repos that one `dos.toml` is the whole policy surface — but when your
737
+ lanes must be *computed* (from runtime state, an env var, a monorepo manifest)
738
+ rather than listed, or you add a provider-backed JUDGE, you write a small
739
+ **driver** instead: a `dos/drivers/<host>.py` exposing a `LaneTaxonomy` constant +
740
+ a `<host>_config` factory, loaded by name via `dos --driver <host>` and never
741
+ imported by the kernel. Copy [`dos/drivers/workshop.py`](https://github.com/anthony-chaudhary/dos-kernel/blob/master/src/dos/drivers/workshop.py)
742
+ as the template; the full driver/plugin map is in **[docs/HACKING.md](https://github.com/anthony-chaudhary/dos-kernel/blob/master/docs/HACKING.md)**.
743
+
744
+ ### Claude Code plugin — hooks + MCP + skills in one install
745
+
746
+ If you drive a fleet with Claude Code, the lowest-friction way to bind the
747
+ verdict to the runtime is the bundled plugin under
748
+ [`claude-plugin/`](https://github.com/anthony-chaudhary/dos-kernel/tree/master/claude-plugin) — it packages all three runtime surfaces at
749
+ once:
750
+
751
+ - the **hooks** (`PreToolUse` → deny a structurally-refused call · `PostToolUse` →
752
+ re-surface a stalled tool stream · `Stop` → refuse to stop on an unverified
753
+ claim) — all fail-safe (they emit nothing and exit 0 on any error, so they never
754
+ break a turn);
755
+ - the **MCP server** (`dos_verify` / `dos_arbitrate` / `dos_commit_audit` /
756
+ `dos_refuse_reasons` … as tools the model calls directly);
757
+ - the **generic skill pack** (the domain-free dispatch screenplays), namespaced as
758
+ `/dos-kernel:dos-next-up`, `/dos-kernel:dos-dispatch`, …
759
+
760
+ ```bash
761
+ # 1. The plugin ships JSON + markdown; the brains ship as the pip package, so
762
+ # install it FIRST into the interpreter Claude Code runs (the [mcp] extra is
763
+ # what the bundled MCP server needs):
764
+ pip install "dos-kernel[mcp]"
765
+
766
+ # 2. Then, inside Claude Code:
767
+ /plugin marketplace add anthony-chaudhary/dos-kernel
768
+ /plugin install dos-kernel@dos
769
+ ```
770
+
771
+ After installing, run **`/dos-kernel:dos-setup`** once — it confirms the package
772
+ is importable, reports what the plugin wired, and points at the next skill. The
773
+ same three hooks are available à la carte via `dos init --hooks claude-code`
774
+ (and for Cursor / Codex / Gemini); the plugin is just the pre-packaged Claude
775
+ Code form. The bundle's design + the build that keeps its skills in lockstep
776
+ with the source are in **[claude-plugin/README.md](https://github.com/anthony-chaudhary/dos-kernel/blob/master/claude-plugin/README.md)**.
777
+
778
+ ## CLI
779
+
780
+ One `dos` entrypoint over the syscalls (see [QUICKSTART.md](https://github.com/anthony-chaudhary/dos-kernel/blob/master/docs/QUICKSTART.md) for
781
+ a runnable tour of the core ones):
782
+
783
+ ```bash
784
+ # --- the syscalls ---
785
+ dos verify PLAN PHASE # truth: did (plan,phase) ship? (works with no plan)
786
+ dos commit-audit [REF] [--sweep] # truth: does a commit's SUBJECT match its own diff? (--sweep = drift rate over a range)
787
+ dos verify-result --transcript T # fold-site witness: did a subagent's terminal record DIE (harness 429/quota)? (exit 3 = DEAD)
788
+ dos coverage --declared N # fan-out coverage: how many of N declared workers REALLY returned a result vs died?
789
+ dos liveness --run-id R --start-sha S # temporal: ADVANCING / SPINNING / STALLED?
790
+ dos resume --run-id R # the resume verdict: replay a run's intent ledger, re-verify against git, PROPOSE the continuation
791
+ dos complete --run-id R [--diverged] # completion verdict: is the WHOLE declared job done? (residual = declared − verified)
792
+ dos rewind --run-id R [--fire SIGNAL] # conversation-rewind verdict: PROPOSE excising dead-end turns (never truncates)
793
+ dos status --run-id R # the folded fact: one fail-closed digest of a run (liveness + verified progress + lease)
794
+ dos arg-provenance --tool T --args J [--new-key K] # did the model MINT this id/FK, or RESOLVE it from env bytes? (exit 0 believe / 3 UNSUPPORTED)
795
+ dos arbitrate --lane L --kind K --leases '[…]' # admission: may a lane start without collision? (decision only — journals nothing; hold via lease-lane)
796
+ dos scope-gate --lane L [--staged] # binding pre-effect scope gate: may this PROPOSED write land in its lane? (ALLOW/REFUSE)
797
+ dos lease {acquire,release,status} OWNER # the cross-process archive lock
798
+ dos lease-lane {acquire,release,heartbeat,live} # durable lane lease over the pure arbiter (write-back to the WAL)
799
+ dos run-id mint PROCESS # mint a correlation run-id
800
+ dos id-alloc {allocate,peek} SCOPE # atomically allocate a never-reused, monotonic id for a scope
801
+ dos journal {tail,replay,seq,compact} # the lane write-ahead log
802
+ dos halt --handle H # the reap verb: emit the stop-plan for a live run/lease
803
+ dos pickable / enumerate / cooldown / reconcile # picker substrate: anything pickable? why-not? tried recently? did the claim hold?
804
+
805
+ # --- workspace & inspection ---
806
+ dos init [DIR] # scaffold a dos.toml workspace config
807
+ dos doctor [--json] [--check] # report the active workspace + taxonomy + predicates
808
+ dos lint [--strict] [--json] # dead policy in this workspace's own dos.toml? (unreachable lanes, dangling refs)
809
+ dos man {wedge,lane} [ID] # the self-describing manual over the registries
810
+ dos exit-codes [VERB] # print the verdict-IS-the-exit-code table (all verbs or one)
811
+ dos gate PACKET # typed empty-packet verdict (LIVE/DRAIN/STALE-STAMP/…)
812
+ dos judge wedge RUN_TS # adjudicate a no-pick verdict (deterministic)
813
+ dos judge-eval --judge N --cases C # score a JUDGE-rung adjudicator against labelled claims
814
+ dos overlap-eval --policy P --cases C # score an overlap scorer by false-admit rate (the disjointness backtest)
815
+ dos intervention-eval --cases C # score an intervention policy by NET task delta (not verdict accuracy)
816
+ dos tool-stream-eval --cases C # score a stall-reader policy by NET recovery (not detection accuracy)
817
+ dos precursor-gate-eval --cases C # score a precursor grammar by recall vs false-refute waste
818
+ dos memory {recall,verify} # re-verify recalled agent-memory at read time (RECALL_FRESH/STALE/UNVERIFIABLE)
819
+ dos health --lane L # pre-dispatch lane-health gate (overlap + recurring-blocker → route)
820
+ dos scout # pre-dispatch chooser: pick the next activity before leasing a lane
821
+ dos trace RUN_ID # walk one run across spine + intent ledger + WAL + git, joined by run_id
822
+
823
+ # --- agent-host binding (Claude Code / MCP) ---
824
+ dos guard [--verify-on-stop] -- CMD… # wrap a headless agent launch: inject the DOS MCP server (+ optional verify-on-stop Stop hook)
825
+ dos hook {pretool,posttool,stop} # the live agent-host hook surface (PreToolUse deny / PostToolUse sensor / Stop verify)
826
+
827
+ # --- live projections (read-only TUIs) ---
828
+ dos top [--once] [--json] # live fleet watchdog: lanes, leases, verdicts, commits
829
+ dos decisions [N] # the operator-decision queue (list + drill-in TUI)
830
+ dos plan [--once] [--json] # work-terrain board: every phase, the plan's claim vs the oracle's verdict
831
+ dos watch --track R [--budget-ms M] # the watchdog driver: poll liveness for tracked runs + propose halts on spin/hang
832
+ dos loop --target N [--watch] [--json] # supervisor (init/PID-1): keep N dispatch-loops alive — emits a spawn/reap/flag plan
833
+
834
+ # --- loop-economics & reliability verdicts (pure; exit code is the verdict) ---
835
+ dos productivity --deltas 5,3,1,0 # is the run still doing work? PRODUCTIVE / DIMINISHING / STALLED
836
+ dos efficiency --work W --tokens N # did the tokens buy work? EFFICIENT / COSTLY / WASTEFUL
837
+ dos breaker --consecutive N --max-consecutive M # has this failure class tripped? CLOSED / OPEN (+ escalation rung)
838
+ dos hook-exit --code N # map a shell hook's exit code → PASS / BLOCK / WARN
839
+ dos exec-capability --command "…" # does this command grant arbitrary exec? BOUNDED / GRANTS_ARBITRARY_EXEC
840
+ dos improve --suite-passed --truth-clean --work W --baseline-work B # self-improving loop: KEEP / REVERT / ESCALATE
841
+ dos reward --claim --witness {confirm,refute,none} # may a fine-tune TRAIN on this trajectory? ACCEPT / REJECT_POISON
842
+
843
+ # --- observability: the verdict journal → your dashboards ---
844
+ dos observe [--run R] [--json] # project the verdict journal: every kernel adjudication, folded by run/syscall/verdict
845
+ dos helped [--since TS] [--json] # the operator rollup: how many things DOS productively caught for you
846
+ dos export [--to file|statsd|otlp] [--since SEQ] # drain the journal outward (Datadog / Honeycomb / Grafana); null = report only
847
+ dos notify {decisions,top} [--notifier slack|webhook --channel NAME] # push what-needs-a-human / what's-running to where the operator is; null = render only
848
+
849
+ # --- portable proof (third-party verifiable, no loop access) ---
850
+ dos attest --claim KEY {--accept-cmd CMD | --before P --after P} # mint an HMAC-signed receipt over an effect-witness verdict
851
+ dos verify-receipt --receipt R # the skeptic's side: check the signature with the shared key alone (fails LOUD on tamper)
852
+
853
+ # --- cross-project (machine-local index) ---
854
+ dos projects # the projects DOS has served
855
+ dos learn AXIS # aggregates over resolved decisions
856
+ dos reindex # rebuild the central store from the .dos/ dirs
857
+ ```
858
+
859
+ Most verbs take `--workspace .` (or honor `$DISPATCH_WORKSPACE` / cwd) and
860
+ `--json` for machine-readable output. For verdict-bearing commands (`verify` /
861
+ `liveness` / `gate`) **the exit code is the verdict.** A pluggable `--output
862
+ <name>` renderer (the `dos.renderers` entry-point group) is covered in
863
+ [HACKING.md](https://github.com/anthony-chaudhary/dos-kernel/blob/master/docs/HACKING.md).
864
+
865
+ ### Three live projections (read-only TUIs)
866
+
867
+ A fleet leaves its state scattered across git history, a write-ahead log, and a
868
+ pile of verdict envelopes. DOS folds that into three read-only screens, each
869
+ answering a different operator question. They are *projections*, not stores:
870
+ every one reads kernel state, mutates nothing, takes no lease, launches nothing
871
+ — delete any of them and you lose the screen, not the data. Pick by the
872
+ question you're asking:
873
+
874
+ | Screen | Answers | Reads |
875
+ |---|---|---|
876
+ | `dos top` | *What's **running** right now?* — the lanes, the leases holding them, recent verdicts, live git activity. The screen you leave open in a side terminal during a run. | leases (WAL) + per-lane `liveness` + verdict envelopes + git |
877
+ | `dos decisions` | *What's waiting on **me** right now?* — the no-picks (refusals, wedges, open gates) that need a decision, each tagged by *who can resolve it*. | the four refusal sources, joined |
878
+ | `dos plan` | *Does the plan's **claim** match the **ground truth**?* — every declared phase, the plan's self-reported status beside the oracle's verdict, so an over-claim is its own cell. | the plan source × `verify()` per phase |
879
+
880
+ In `dos top` a held lane's status chip **is** its `liveness` verdict — green
881
+ `ADVANCING` / yellow `SPINNING` / red `STALLED` — so "which one is wedged" is one
882
+ glance, not a log dig. `dos decisions` tags each row by resolver — a deterministic
883
+ **ORACLE** (may auto-clear), an **LLM JUDGE** (could rule before you spend
884
+ attention), or a **HUMAN** (a genuine operator call) — and on a keypress prints
885
+ the exact shell command and exits; *you* run it, the screen never mutates
886
+ substrate. `dos plan` is a `verify()` fan-out, **not** a plan reader: a human runs
887
+ it from *outside* the agent loop, so an over-claiming loop is caught by ground
888
+ truth, not by re-reading its own narration.
889
+
890
+ All three have a plain-text floor that needs no dependencies — the live `rich`
891
+ redraw is the optional `[tui]` extra, but `--once` (one frame) and `--json`
892
+ work on a bare core install (no extras). Here is `dos top --once` on a fresh
893
+ checkout (no leases yet, so every lane is `FREE` and the git strip carries the
894
+ content):
895
+
896
+ ```text
897
+ ┌─ dos top · /path/to/repo · 2026-06-07T17:14:32+00:00 ──────────────────────
898
+ LANES
899
+ benchmark ⚪ FREE
900
+ docs ⚪ FREE
901
+ … (one concurrent lane per source dir)
902
+ *global ⚪ FREE (* = the exclusive whole-repo lane)
903
+ 8 lanes · 0 advancing · 0 spinning · 0 stalled · 8 free
904
+ RECENT VERDICTS [trust = ship-oracle cross-check]
905
+ (no verdicts yet)
906
+ RECENT COMMITS [ground truth — git history]
907
+ 0857bd4 docs/206 Appendix A: the whole program in plain words
908
+ … (last 10 commits — the content even a
909
+ zero-lease repo always has)
910
+ ──────────────────────────────────────────────────────────────────────────────
911
+ read-only · q quit · this screen mutates nothing
912
+ ```
913
+
914
+ The stuck-fleet walkthrough that drives all three end-to-end is
915
+ **[Debug a stuck fleet](https://github.com/anthony-chaudhary/dos-kernel/blob/master/examples/playbooks/06_debug-a-stuck-fleet.md)**.
916
+
917
+ <p align="center">
918
+ <img src="https://raw.githubusercontent.com/anthony-chaudhary/dos-kernel/master/docs/assets/decisions-tui.svg" alt="The dos decisions queue: four pending arbiter refusals on the left, each routed to who can resolve it — a deterministic ORACLE (may auto-clear), an LLM JUDGE (could rule), or a HUMAN (your call) — and on the right the selected SELF_MODIFY decision expanded with its meaning, typical fix, and the exact commands to run." width="100%">
919
+ </p>
920
+
921
+ ### Observability: the verdict journal, drained to your dashboards
922
+
923
+ Those three screens read a fleet's *running* state. Underneath, every verdict
924
+ the kernel computes — each `verify` / `liveness` / `efficiency` / `breaker` /
925
+ `reward` / hook decision — also lands in a **verdict journal**: a
926
+ `run_id`-correlated write-ahead log of the kernel's *own* adjudications
927
+ ([docs/262](https://github.com/anthony-chaudhary/dos-kernel/blob/master/docs/262_the-verdict-journal-observability-as-a-first-class-surface.md)).
928
+ Two verbs make it useful. `dos observe` is the read-only projection — fold the
929
+ journal by run, syscall, or verdict, or replay one run's verdict history. `dos
930
+ export` is the delivery seam: it drains the journal outward to an observability
931
+ backend through the `dos.exporters` entry-point group, with three shipped
932
+ transports — `file` (JSONL), `statsd` (DogStatsD counters), and `otlp`
933
+ (OpenTelemetry log records → Datadog / Honeycomb / Grafana), the `null` default
934
+ reporting only ([docs/266](https://github.com/anthony-chaudhary/dos-kernel/blob/master/docs/266_the-verdict-exporter-shipping-the-journal-to-where-dashboards-live.md)).
935
+ So "how often did the fleet over-claim this week, and on which lanes?" becomes a
936
+ dashboard panel, not a log grep — and adding a transport is a driver, never a
937
+ kernel edit (the same kernel/driver split as judges and notifiers).
938
+
939
+ ## Operating a fleet
940
+
941
+ The listing above is the reference; this is the day-2 shape of running on it —
942
+ what an operator actually does each morning, and where to look first when
943
+ something wedges.
944
+
945
+ **Morning triage is three reads, in order.** `dos top` answers *what's running
946
+ right now*: each lane, the lease holding it, and a status chip that **is** the
947
+ liveness verdict — green `ADVANCING`, yellow `SPINNING`, red `STALLED` — so
948
+ "which one is wedged" is one glance, not a log dig. `dos decisions` answers
949
+ *what's waiting on me*: the refusals and open gates that need a decision, each
950
+ tagged by who can resolve it, so you spend attention only on the rows marked
951
+ HUMAN. And `dos plan` answers *is anyone over-claiming*: every declared phase,
952
+ the plan's self-reported status beside the oracle's verdict — run from outside
953
+ the agent loop, so an over-claimer is caught by ground truth, not by
954
+ re-reading its own narration. All three are read-only projections (no lease
955
+ taken, nothing launched, nothing mutated), so leave them open or script them —
956
+ each has `--once` and `--json`.
957
+
958
+ **Then route the signal to where you already look.** You don't have to keep a
959
+ terminal open: `dos notify` pushes what-needs-a-human (or what's-running) to
960
+ Slack or a webhook on whatever cadence you drive it with, and `dos export`
961
+ drains the verdict journal — every adjudication the kernel computed — to your
962
+ observability stack (file / statsd / OTLP → Datadog, Honeycomb, Grafana). "How
963
+ often did the fleet over-claim this week, and on which lanes?" becomes a
964
+ dashboard panel, not a log grep.
965
+
966
+ **When something wedges, start with the verdicts, not the logs.** The
967
+ symptom → one-command table — a run that swears it's progressing but isn't, a
968
+ lane nobody can take, a "done" that won't verify — is
969
+ **[Debug a stuck fleet](https://github.com/anthony-chaudhary/dos-kernel/blob/master/examples/playbooks/06_debug-a-stuck-fleet.md)**,
970
+ which drives all three screens end-to-end on a worked example. Link it from
971
+ your on-call doc; it is the playbook.
972
+
973
+ Running smoothly and want the referee to fit your org — your own lanes, your
974
+ own block reasons, a model-backed judge? Step up a level:
975
+ [Hacking it](#hacking-it).
976
+
977
+ ## Hacking it
978
+
979
+ DOS is built to be extended without forking the package — add your own block
980
+ reasons, gate verdicts, admission/safety predicates, output renderers (the
981
+ `dos.renderers` entry-point group), and your own judge for the JUDGE rung
982
+ (`dos.judges`, scored by `dos judge-eval`), all as *workspace policy*, not
983
+ package edits. The block-reason vocabulary is fully data-driven: declare a
984
+ reason in four lines of `dos.toml` and it becomes emittable, verifiable,
985
+ refusable, and `dos man wedge`-documented through the same kernel calls a
986
+ built-in uses. See **[docs/HACKING.md](https://github.com/anthony-chaudhary/dos-kernel/blob/master/docs/HACKING.md)** for the seven
987
+ extension axes and the plugin model, and **[`examples/dos_ext/`](https://github.com/anthony-chaudhary/dos-kernel/tree/master/examples/dos_ext)**
988
+ for a copy-me skeleton.
989
+
990
+ ## Documentation
991
+
992
+ - **[docs/QUICKSTART.md](https://github.com/anthony-chaudhary/dos-kernel/blob/master/docs/QUICKSTART.md)** — runnable 5-minute hello-world. Start here.
993
+ - **[docs/README.md](https://github.com/anthony-chaudhary/dos-kernel/blob/master/docs/README.md)** — the docs index (guides vs. design notes
994
+ vs. the dated build-journal; the numbers are chronology, not a reading order).
995
+ - **[docs/HACKING.md](https://github.com/anthony-chaudhary/dos-kernel/blob/master/docs/HACKING.md)** — extend DOS without forking it.
996
+ - **[CLAUDE.md](https://github.com/anthony-chaudhary/dos-kernel/blob/master/CLAUDE.md)** / **[CONTRIBUTING.md](https://github.com/anthony-chaudhary/dos-kernel/blob/master/CONTRIBUTING.md)** — the
997
+ architecture contract and how to send a change.
998
+ - **[docs/releases/](https://github.com/anthony-chaudhary/dos-kernel/tree/master/docs/releases)** — per-version release notes (the changelog).
999
+
1000
+ ## Playbooks & examples
1001
+
1002
+ **[`examples/playbooks/`](https://github.com/anthony-chaudhary/dos-kernel/tree/master/examples/playbooks)** walks the syscalls end-to-end on
1003
+ anonymized real-world repo shapes — every command was run and its output pasted
1004
+ back verbatim:
1005
+
1006
+ - **[Onboard a repo in 10 minutes](https://github.com/anthony-chaudhary/dos-kernel/blob/master/examples/playbooks/01_onboard-a-repo.md)** —
1007
+ `pip install` → first verified ship, on any repo.
1008
+ - Four archetypes — a [polyglot web-service fleet](https://github.com/anthony-chaudhary/dos-kernel/blob/master/examples/playbooks/02_polyglot-web-service.md)
1009
+ (concurrent lanes), an [OSS library release](https://github.com/anthony-chaudhary/dos-kernel/blob/master/examples/playbooks/03_oss-library-release.md)
1010
+ (the stamp grammar), a [data/ML pipeline](https://github.com/anthony-chaudhary/dos-kernel/blob/master/examples/playbooks/04_data-ml-pipeline.md)
1011
+ (liveness), an [infra monorepo](https://github.com/anthony-chaudhary/dos-kernel/blob/master/examples/playbooks/05_infra-monorepo.md) (refusals).
1012
+ - [**Debug a stuck fleet** + FAQ](https://github.com/anthony-chaudhary/dos-kernel/blob/master/examples/playbooks/06_debug-a-stuck-fleet.md) —
1013
+ symptom → the one command that diagnoses it.
1014
+ - Three cookbooks: [from Python](https://github.com/anthony-chaudhary/dos-kernel/blob/master/examples/playbooks/cookbook-python-api.md),
1015
+ [CI / MCP integration](https://github.com/anthony-chaudhary/dos-kernel/blob/master/examples/playbooks/cookbook-ci-integration.md), and
1016
+ [fleet frameworks](https://github.com/anthony-chaudhary/dos-kernel/blob/master/examples/playbooks/cookbook-fleet-frameworks.md) — LangGraph,
1017
+ CrewAI, AutoGen, the OpenAI/Claude Agents SDK — with every framework recipe also
1018
+ shipped as a runnable, suite-pinned file under
1019
+ [`examples/fleet_frameworks/`](https://github.com/anthony-chaudhary/dos-kernel/tree/master/examples/fleet_frameworks).
1020
+ - [**Wire DOS into a Hermes / OpenClaw swarm**](https://github.com/anthony-chaudhary/dos-kernel/tree/master/examples/hermes_integration) —
1021
+ the offline, A/B-measured swarm-runtime example: the `exec-capability` gate
1022
+ refuses a prompt-injected command before it runs (real at a single agent), and
1023
+ the arbiter serves as the swarms' missing lock manager so the lost updates the
1024
+ runtime would silently incur drop to zero (value grows with fleet size; the
1025
+ honest K=1 falsifier is included). Both scoreboards read non-forgeable witnesses
1026
+ ([docs/278](https://github.com/anthony-chaudhary/dos-kernel/blob/master/docs/278_integrating-dos-with-hermes-and-openclaw-the-missing-lock-manager-for-agent-swarms.md)).
1027
+ - Runnable [`examples/workspaces/`](https://github.com/anthony-chaudhary/dos-kernel/tree/master/examples/workspaces) — `cd` in and run `dos`
1028
+ against a realistic lane taxonomy.
1029
+
1030
+ *Next level up — evaluating the claims themselves: [For researchers](#for-researchers).*
1031
+
1032
+ ## For researchers
1033
+
1034
+ Every number this README claims is graded the way the kernel grades agents: it
1035
+ counts only if a witness the graded party didn't author backs it. This section
1036
+ is the on-ramp joining the claims to their write-ups, the two formal
1037
+ invariants, and the literature — the depth lives under
1038
+ [`benchmark/`](https://github.com/anthony-chaudhary/dos-kernel/tree/master/benchmark) and the paper.
1039
+
1040
+ **The claims register.** The proven rows from
1041
+ [the evidence section](#whats-proven-and-whats-still-a-bet), each with the
1042
+ witness it was scored against and the write-up that reproduces it:
1043
+
1044
+ | Claim | Result | Witness | Write-up |
1045
+ |---|---|---|---|
1046
+ | the write-admission gate catches the over-claim | J = 10/120 "I shipped it" lies blocked, 0 honest writes refused, the same 8.3% over-claim rate on a mid-size and a top-tier model (15/258 over the full benchmark) | the env DB-hash the agent authored zero bytes of | [`agentprocessbench/writeadmit/`](https://github.com/anthony-chaudhary/dos-kernel/tree/master/benchmark/agentprocessbench/writeadmit) |
1047
+ | the arbiter prevents the lost update | J = 4/6 natural-mix clobbers prevented (6/8 constructed; 8/8 in the two-domain τ²-bench port; 9/10 in the live replication) | the post-state DB-hash neither agent authors | [`tau2coord/RESULTS.md`](https://github.com/anthony-chaudhary/dos-kernel/blob/master/benchmark/tau2coord/RESULTS.md) |
1048
+ | mid-run "fixes" are flat-to-negative; witness-gated early-halt is the survivor | 0 false-abandons / 1,634 winners across 22 models (error-gated, K≥3) — and the same test falsifies the naive raw-repeat gate | each task's own oracle over a frozen replay corpus | [`giveup_cross_benchmark.py`](https://github.com/anthony-chaudhary/dos-kernel/blob/master/benchmark/giveup_cross_benchmark.py) · [the corpus ledger](https://github.com/anthony-chaudhary/dos-kernel/blob/master/benchmark/toolathlon/_results/additivity_claims.md) |
1049
+ | the reward-set admission label can't be gamed | acceptance precision 60% → 100%, J = 5 poison labels purged (ΔP +40 pp) from a naive self-judged collector's bank | the gold DB-hash, keyed on `db_match` | [docs/230](https://github.com/anthony-chaudhary/dos-kernel/blob/master/docs/230_the-lab-facing-twin-rlvr-admit-the-non-distillable-reward-label.md) |
1050
+
1051
+ **The two invariants.** The formal contribution under those numbers, stated
1052
+ precisely:
1053
+
1054
+ 1. **The non-forgeable witness**
1055
+ ([docs/138](https://github.com/anthony-chaudhary/dos-kernel/blob/master/docs/138_what-is-truth-the-throughline.md)):
1056
+ every kernel verdict is a pure function `classify(evidence, policy)` whose
1057
+ evidence is bytes the adjudicated agent did not author — git ancestry, an
1058
+ environment's database state, the file tree, the clock. Byte-author ≠
1059
+ claimant is the load-bearing split: the agent may write anything it likes,
1060
+ and none of it is an input to the verdict.
1061
+ 2. **The non-distillable label**
1062
+ ([docs/230](https://github.com/anthony-chaudhary/dos-kernel/blob/master/docs/230_the-lab-facing-twin-rlvr-admit-the-non-distillable-reward-label.md),
1063
+ [docs/234](https://github.com/anthony-chaudhary/dos-kernel/blob/master/docs/234_the-non-distillable-reward-channel-lab-facing-proof.md)):
1064
+ the reward-set admission bit (`dos reward`) is a pure function of that
1065
+ witness, so — conditional on environment state — it is independent of the
1066
+ answer text. No token sequence moves a `REJECT_POISON` to an `ACCEPT`, and a
1067
+ forgeable read-back is structurally ignored, not down-weighted.
1068
+
1069
+ **Reproduce it.** One runner fronts the suite: `python -m benchmark._run list`
1070
+ inventories every benchmark with its arms, cost, and prereqs, and each proven
1071
+ row above has a $0 offline arm
1072
+ ([`benchmark/BENCHMARKS.md`](https://github.com/anthony-chaudhary/dos-kernel/blob/master/benchmark/BENCHMARKS.md)).
1073
+ Read the numbers under one rule: a **J** is a count of failures blocked off
1074
+ ground truth, never a downstream outcome delta — "blocked 10 real over-claims"
1075
+ is proven, "made the fleet 10% better" is a different sentence, and we don't
1076
+ write it.
1077
+
1078
+ **Where it sits.** The lineage is deliberate, one line each: the kernel is a
1079
+ reference monitor in the minimal-TCB tradition — a small, separate,
1080
+ non-bypassable adjudicator outside the agents it judges; `resume` is the third
1081
+ ARIES phase aimed forward — continue from the durable fossils, never from the
1082
+ dead run's account of itself; the arbiter enforces serializability over shared
1083
+ world-state regions, with the lost update as its target anomaly; and
1084
+ `reward()` lands in the reward-hacking / scalable-oversight line — a
1085
+ deterministic floor inside the training loop. The full argument is the paper,
1086
+ *"Verification Is All You Need — But Not Where You Think"*
1087
+ ([`paper/releases/`](https://github.com/anthony-chaudhary/dos-kernel/tree/master/paper/releases)),
1088
+ and the BibTeX is in [Citation](#citation).
1089
+
1090
+ ## Citation
1091
+
1092
+ The ideas here are written up in a paper — *"Verification Is All You Need — But
1093
+ Not Where You Think"* — on the out-of-loop referee for agent fleets. A built PDF
1094
+ lives at [`paper/releases/`](https://github.com/anthony-chaudhary/dos-kernel/tree/master/paper/releases); the arXiv preprint is in
1095
+ preparation. Until the arXiv ID lands, cite the repository:
1096
+
1097
+ ```bibtex
1098
+ @misc{dos_kernel,
1099
+ title = {Verification Is All You Need --- But Not Where You Think},
1100
+ author = {Chaudhary, Anthony},
1101
+ howpublished = {\url{https://github.com/anthony-chaudhary/dos-kernel}},
1102
+ note = {DOS --- the Dispatch Operating System; arXiv preprint in preparation},
1103
+ year = {2026}
1104
+ }
1105
+ ```
1106
+
1107
+ ## License
1108
+
1109
+ MIT — see [LICENSE](https://github.com/anthony-chaudhary/dos-kernel/blob/master/LICENSE).
1110
+
1111
+ <!-- The marker below is the official MCP Registry's PyPI ownership proof: the
1112
+ registry only accepts a server.json naming the `dos-kernel` PyPI package if
1113
+ this exact token appears in the published package README. Keep it intact. -->
1114
+ <!-- mcp-name: io.github.anthony-chaudhary/dos-kernel -->