invar-tools 1.7.0__tar.gz → 1.8.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (286) hide show
  1. {invar_tools-1.7.0 → invar_tools-1.8.0}/.claude/hooks/invar.PostToolUse.sh +1 -1
  2. {invar_tools-1.7.0 → invar_tools-1.8.0}/.claude/hooks/invar.PreToolUse.sh +1 -1
  3. {invar_tools-1.7.0 → invar_tools-1.8.0}/.claude/hooks/invar.Stop.sh +1 -1
  4. {invar_tools-1.7.0 → invar_tools-1.8.0}/.claude/hooks/invar.UserPromptSubmit.sh +2 -1
  5. {invar_tools-1.7.0 → invar_tools-1.8.0}/.claude/skills/develop/SKILL.md +59 -0
  6. {invar_tools-1.7.0 → invar_tools-1.8.0}/.claude/skills/investigate/SKILL.md +15 -0
  7. {invar_tools-1.7.0 → invar_tools-1.8.0}/.claude/skills/propose/SKILL.md +29 -0
  8. {invar_tools-1.7.0 → invar_tools-1.8.0}/.claude/skills/review/SKILL.md +15 -0
  9. {invar_tools-1.7.0 → invar_tools-1.8.0}/CLAUDE.md +18 -0
  10. {invar_tools-1.7.0 → invar_tools-1.8.0}/PKG-INFO +71 -46
  11. {invar_tools-1.7.0 → invar_tools-1.8.0}/README.md +69 -45
  12. {invar_tools-1.7.0 → invar_tools-1.8.0}/docs/agents.md +1 -2
  13. {invar_tools-1.7.0 → invar_tools-1.8.0}/docs/design.md +5 -4
  14. {invar_tools-1.7.0 → invar_tools-1.8.0}/docs/guides/multi-agent.md +69 -28
  15. invar_tools-1.8.0/docs/guides/pi.md +275 -0
  16. {invar_tools-1.7.0 → invar_tools-1.8.0}/docs/index.html +9 -10
  17. invar_tools-1.8.0/docs/proposals/DX-70-init-simplification.md +273 -0
  18. {invar_tools-1.7.0 → invar_tools-1.8.0}/docs/proposals/LX-04-pi-agent-support.md +153 -37
  19. {invar_tools-1.7.0 → invar_tools-1.8.0}/docs/proposals/index.md +31 -21
  20. {invar_tools-1.7.0 → invar_tools-1.8.0}/pyproject.toml +2 -1
  21. invar_tools-1.8.0/src/invar/core/template_helpers.py +32 -0
  22. {invar_tools-1.7.0 → invar_tools-1.8.0}/src/invar/core/utils.py +3 -1
  23. {invar_tools-1.7.0 → invar_tools-1.8.0}/src/invar/shell/claude_hooks.py +90 -0
  24. invar_tools-1.8.0/src/invar/shell/commands/init.py +457 -0
  25. {invar_tools-1.7.0 → invar_tools-1.8.0}/src/invar/shell/commands/uninstall.py +162 -7
  26. {invar_tools-1.7.0 → invar_tools-1.8.0}/src/invar/shell/contract_coverage.py +4 -1
  27. invar_tools-1.8.0/src/invar/shell/pi_hooks.py +207 -0
  28. {invar_tools-1.7.0 → invar_tools-1.8.0}/src/invar/shell/templates.py +35 -29
  29. {invar_tools-1.7.0/.claude → invar_tools-1.8.0/src/invar/templates}/commands/audit.md +6 -0
  30. {invar_tools-1.7.0/.claude → invar_tools-1.8.0/src/invar/templates}/commands/guard.md +6 -0
  31. invar_tools-1.8.0/src/invar/templates/config/AGENT.md.jinja +198 -0
  32. {invar_tools-1.7.0 → invar_tools-1.8.0}/src/invar/templates/config/pre-commit.yaml.jinja +2 -0
  33. invar_tools-1.8.0/src/invar/templates/hooks/pi/invar.ts.jinja +73 -0
  34. {invar_tools-1.7.0 → invar_tools-1.8.0}/src/invar/templates/manifest.toml +1 -0
  35. {invar_tools-1.7.0 → invar_tools-1.8.0}/src/invar/templates/skills/develop/SKILL.md.jinja +59 -0
  36. {invar_tools-1.7.0 → invar_tools-1.8.0}/src/invar/templates/skills/investigate/SKILL.md.jinja +15 -0
  37. {invar_tools-1.7.0 → invar_tools-1.8.0}/src/invar/templates/skills/propose/SKILL.md.jinja +33 -0
  38. {invar_tools-1.7.0 → invar_tools-1.8.0}/src/invar/templates/skills/review/SKILL.md.jinja +15 -0
  39. invar_tools-1.7.0/src/invar/shell/commands/init.py +0 -420
  40. invar_tools-1.7.0/src/invar/templates/pre-commit-config.yaml.template +0 -46
  41. {invar_tools-1.7.0 → invar_tools-1.8.0}/.aider.conf.yml +0 -0
  42. {invar_tools-1.7.0/src/invar/templates → invar_tools-1.8.0/.claude}/commands/audit.md +0 -0
  43. {invar_tools-1.7.0/src/invar/templates → invar_tools-1.8.0/.claude}/commands/guard.md +0 -0
  44. {invar_tools-1.7.0 → invar_tools-1.8.0}/.claude/hooks/PostToolUse.sh +0 -0
  45. {invar_tools-1.7.0 → invar_tools-1.8.0}/.claude/hooks/PreToolUse.sh +0 -0
  46. {invar_tools-1.7.0 → invar_tools-1.8.0}/.claude/hooks/Stop.sh +0 -0
  47. {invar_tools-1.7.0 → invar_tools-1.8.0}/.claude/hooks/UserPromptSubmit.sh +0 -0
  48. {invar_tools-1.7.0 → invar_tools-1.8.0}/.cursorrules +0 -0
  49. {invar_tools-1.7.0 → invar_tools-1.8.0}/.github/workflows/ci.yml +0 -0
  50. {invar_tools-1.7.0 → invar_tools-1.8.0}/.github/workflows/publish.yml +0 -0
  51. {invar_tools-1.7.0 → invar_tools-1.8.0}/.gitignore +0 -0
  52. {invar_tools-1.7.0 → invar_tools-1.8.0}/.invar/archive/sessions-2025-12.md +0 -0
  53. {invar_tools-1.7.0 → invar_tools-1.8.0}/.invar/context.md +0 -0
  54. {invar_tools-1.7.0 → invar_tools-1.8.0}/.invar/examples/README.md +0 -0
  55. {invar_tools-1.7.0 → invar_tools-1.8.0}/.invar/examples/conftest.py +0 -0
  56. {invar_tools-1.7.0 → invar_tools-1.8.0}/.invar/examples/contracts.py +0 -0
  57. {invar_tools-1.7.0 → invar_tools-1.8.0}/.invar/examples/core_shell.py +0 -0
  58. {invar_tools-1.7.0 → invar_tools-1.8.0}/.invar/examples/functional.py +0 -0
  59. {invar_tools-1.7.0 → invar_tools-1.8.0}/.invar/examples/workflow.md +0 -0
  60. {invar_tools-1.7.0 → invar_tools-1.8.0}/.invar/mcp-setup.md +0 -0
  61. {invar_tools-1.7.0 → invar_tools-1.8.0}/.invar/project-additions.md +0 -0
  62. {invar_tools-1.7.0 → invar_tools-1.8.0}/.invar/proposals/TEMPLATE.md +0 -0
  63. {invar_tools-1.7.0 → invar_tools-1.8.0}/.mcp.json +0 -0
  64. {invar_tools-1.7.0 → invar_tools-1.8.0}/.pre-commit-config.yaml +0 -0
  65. {invar_tools-1.7.0 → invar_tools-1.8.0}/.serena/.gitignore +0 -0
  66. {invar_tools-1.7.0 → invar_tools-1.8.0}/.serena/project.yml +0 -0
  67. {invar_tools-1.7.0 → invar_tools-1.8.0}/INVAR.md +0 -0
  68. {invar_tools-1.7.0 → invar_tools-1.8.0}/LICENSE +0 -0
  69. {invar_tools-1.7.0 → invar_tools-1.8.0}/LICENSE-GPL +0 -0
  70. {invar_tools-1.7.0 → invar_tools-1.8.0}/NOTICE +0 -0
  71. {invar_tools-1.7.0 → invar_tools-1.8.0}/docs/.nojekyll +0 -0
  72. {invar_tools-1.7.0 → invar_tools-1.8.0}/docs/diagrams.md +0 -0
  73. {invar_tools-1.7.0 → invar_tools-1.8.0}/docs/guide.md +0 -0
  74. {invar_tools-1.7.0 → invar_tools-1.8.0}/docs/guides/aider.md +0 -0
  75. {invar_tools-1.7.0 → invar_tools-1.8.0}/docs/guides/cline.md +0 -0
  76. {invar_tools-1.7.0 → invar_tools-1.8.0}/docs/guides/continue.md +0 -0
  77. {invar_tools-1.7.0 → invar_tools-1.8.0}/docs/guides/cursor.md +0 -0
  78. {invar_tools-1.7.0 → invar_tools-1.8.0}/docs/history/decisions-2024.md +0 -0
  79. {invar_tools-1.7.0 → invar_tools-1.8.0}/docs/history/feedback/compliance-analysis.md +0 -0
  80. {invar_tools-1.7.0 → invar_tools-1.8.0}/docs/history/feedback/feedback-memo.md +0 -0
  81. {invar_tools-1.7.0 → invar_tools-1.8.0}/docs/history/feedback/index.md +0 -0
  82. {invar_tools-1.7.0 → invar_tools-1.8.0}/docs/history/index.md +0 -0
  83. {invar_tools-1.7.0 → invar_tools-1.8.0}/docs/history/original-vision.md +0 -0
  84. {invar_tools-1.7.0 → invar_tools-1.8.0}/docs/history/protocol-evolution.md +0 -0
  85. {invar_tools-1.7.0 → invar_tools-1.8.0}/docs/history/research/cruxeval-quick-validation.md +0 -0
  86. {invar_tools-1.7.0 → invar_tools-1.8.0}/docs/logo.svg +0 -0
  87. {invar_tools-1.7.0 → invar_tools-1.8.0}/docs/proposals/DX-23-entry-point-detection.md +0 -0
  88. {invar_tools-1.7.0 → invar_tools-1.8.0}/docs/proposals/DX-25-functional-patterns.md +0 -0
  89. {invar_tools-1.7.0 → invar_tools-1.8.0}/docs/proposals/DX-29-pure-content-detection.md +0 -0
  90. {invar_tools-1.7.0 → invar_tools-1.8.0}/docs/proposals/DX-37-coverage-integration.md +0 -0
  91. {invar_tools-1.7.0 → invar_tools-1.8.0}/docs/proposals/DX-38-contract-quality-rules.md +0 -0
  92. {invar_tools-1.7.0 → invar_tools-1.8.0}/docs/proposals/DX-39-workflow-efficiency.md +0 -0
  93. {invar_tools-1.7.0 → invar_tools-1.8.0}/docs/proposals/DX-40-smart-tool-redirect-hook.md +0 -0
  94. {invar_tools-1.7.0 → invar_tools-1.8.0}/docs/proposals/DX-41-automatic-review-orchestration.md +0 -0
  95. {invar_tools-1.7.0 → invar_tools-1.8.0}/docs/proposals/DX-42-workflow-auto-routing.md +0 -0
  96. {invar_tools-1.7.0 → invar_tools-1.8.0}/docs/proposals/DX-43-cross-platform-distribution.md +0 -0
  97. {invar_tools-1.7.0 → invar_tools-1.8.0}/docs/proposals/DX-46-documentation-audit.md +0 -0
  98. {invar_tools-1.7.0 → invar_tools-1.8.0}/docs/proposals/DX-48-code-structure-reorganization.md +0 -0
  99. {invar_tools-1.7.0 → invar_tools-1.8.0}/docs/proposals/DX-49-protocol-distribution-unification.md +0 -0
  100. {invar_tools-1.7.0 → invar_tools-1.8.0}/docs/proposals/DX-50-workflow-enforcement.md +0 -0
  101. {invar_tools-1.7.0 → invar_tools-1.8.0}/docs/proposals/DX-51-workflow-phase-visibility.md +0 -0
  102. {invar_tools-1.7.0 → invar_tools-1.8.0}/docs/proposals/DX-52-venv-dependency-injection.md +0 -0
  103. {invar_tools-1.7.0 → invar_tools-1.8.0}/docs/proposals/DX-53-review-loop-effectiveness.md +0 -0
  104. {invar_tools-1.7.0 → invar_tools-1.8.0}/docs/proposals/DX-54-agent-native-context-management.md +0 -0
  105. {invar_tools-1.7.0 → invar_tools-1.8.0}/docs/proposals/DX-55-claude-init-conflict-resolution.md +0 -0
  106. {invar_tools-1.7.0 → invar_tools-1.8.0}/docs/proposals/DX-56-template-sync-unification.md +0 -0
  107. {invar_tools-1.7.0 → invar_tools-1.8.0}/docs/proposals/DX-60-structured-rules-ssot.md +0 -0
  108. {invar_tools-1.7.0 → invar_tools-1.8.0}/docs/proposals/DX-61-functional-pattern-guidance.md +0 -0
  109. {invar_tools-1.7.0 → invar_tools-1.8.0}/docs/proposals/DX-61-implementation-design.md +0 -0
  110. {invar_tools-1.7.0 → invar_tools-1.8.0}/docs/proposals/DX-62-proactive-reference-reading.md +0 -0
  111. {invar_tools-1.7.0 → invar_tools-1.8.0}/docs/proposals/DX-64-version-display-unification.md +0 -0
  112. {invar_tools-1.7.0 → invar_tools-1.8.0}/docs/proposals/DX-65-single-file-guard.md +0 -0
  113. {invar_tools-1.7.0 → invar_tools-1.8.0}/docs/proposals/DX-66-escape-hatch-visibility.md +0 -0
  114. {invar_tools-1.7.0 → invar_tools-1.8.0}/docs/proposals/DX-67-explicit-skill-invocation.md +0 -0
  115. {invar_tools-1.7.0 → invar_tools-1.8.0}/docs/proposals/DX-68-agent-behavior-optimization.md +0 -0
  116. {invar_tools-1.7.0 → invar_tools-1.8.0}/docs/proposals/DX-69-project-uninstall.md +0 -0
  117. {invar_tools-1.7.0 → invar_tools-1.8.0}/docs/proposals/LX-01-multi-language-feasibility.md +0 -0
  118. {invar_tools-1.7.0 → invar_tools-1.8.0}/docs/proposals/LX-02-agent-portability-analysis.md +0 -0
  119. {invar_tools-1.7.0 → invar_tools-1.8.0}/docs/proposals/completed/2024-12-21-guard-enhancements.md +0 -0
  120. {invar_tools-1.7.0 → invar_tools-1.8.0}/docs/proposals/completed/2024-12-21-language-inspired-enhancements.md +0 -0
  121. {invar_tools-1.7.0 → invar_tools-1.8.0}/docs/proposals/completed/2024-12-21-test-first-enhancement.md +0 -0
  122. {invar_tools-1.7.0 → invar_tools-1.8.0}/docs/proposals/completed/2025-12-21-dx-improvements.md +0 -0
  123. {invar_tools-1.7.0 → invar_tools-1.8.0}/docs/proposals/completed/2025-12-23-dx-20-property-testing-enhancements.md +0 -0
  124. {invar_tools-1.7.0 → invar_tools-1.8.0}/docs/proposals/completed/2025-12-23-dx-21-package-and-init.md +0 -0
  125. {invar_tools-1.7.0 → invar_tools-1.8.0}/docs/proposals/completed/AGENT-IMPROVEMENTS.md +0 -0
  126. {invar_tools-1.7.0 → invar_tools-1.8.0}/docs/proposals/completed/DX-11-documentation-restructure.md +0 -0
  127. {invar_tools-1.7.0 → invar_tools-1.8.0}/docs/proposals/completed/DX-12-hypothesis-fallback.md +0 -0
  128. {invar_tools-1.7.0 → invar_tools-1.8.0}/docs/proposals/completed/DX-13-incremental-prove.md +0 -0
  129. {invar_tools-1.7.0 → invar_tools-1.8.0}/docs/proposals/completed/DX-14-expanded-prove-usage.md +0 -0
  130. {invar_tools-1.7.0 → invar_tools-1.8.0}/docs/proposals/completed/DX-16-agent-tool-enforcement.md +0 -0
  131. {invar_tools-1.7.0 → invar_tools-1.8.0}/docs/proposals/completed/DX-17-workflow-enforcement.md +0 -0
  132. {invar_tools-1.7.0 → invar_tools-1.8.0}/docs/proposals/completed/DX-22-verification-strategy.md +0 -0
  133. {invar_tools-1.7.0 → invar_tools-1.8.0}/docs/proposals/completed/DX-24-mechanism-documentation.md +0 -0
  134. {invar_tools-1.7.0 → invar_tools-1.8.0}/docs/proposals/completed/DX-26-guard-simplification.md +0 -0
  135. {invar_tools-1.7.0 → invar_tools-1.8.0}/docs/proposals/completed/DX-27-system-prompt-protocol.md +0 -0
  136. {invar_tools-1.7.0 → invar_tools-1.8.0}/docs/proposals/completed/DX-28-semantic-verification.md +0 -0
  137. {invar_tools-1.7.0 → invar_tools-1.8.0}/docs/proposals/completed/DX-30-visible-workflow.md +0 -0
  138. {invar_tools-1.7.0 → invar_tools-1.8.0}/docs/proposals/completed/DX-31-adversarial-reviewer.md +0 -0
  139. {invar_tools-1.7.0 → invar_tools-1.8.0}/docs/proposals/completed/DX-32-workflow-iteration.md +0 -0
  140. {invar_tools-1.7.0 → invar_tools-1.8.0}/docs/proposals/completed/DX-33-verification-blind-spots.md +0 -0
  141. {invar_tools-1.7.0 → invar_tools-1.8.0}/docs/proposals/completed/DX-34-review-cycle.md +0 -0
  142. {invar_tools-1.7.0 → invar_tools-1.8.0}/docs/proposals/completed/DX-35-workflow-phase-separation.md +0 -0
  143. {invar_tools-1.7.0 → invar_tools-1.8.0}/docs/proposals/completed/DX-36-documentation-restructuring.md +0 -0
  144. {invar_tools-1.7.0 → invar_tools-1.8.0}/docs/proposals/completed/DX-45-template-consistency.md +0 -0
  145. {invar_tools-1.7.0 → invar_tools-1.8.0}/docs/proposals/completed/DX-47-command-skill-naming.md +0 -0
  146. {invar_tools-1.7.0 → invar_tools-1.8.0}/docs/proposals/completed/DX-57-claude-code-hooks.md +0 -0
  147. {invar_tools-1.7.0 → invar_tools-1.8.0}/docs/proposals/completed/DX-58-document-structure-optimization.md +0 -0
  148. {invar_tools-1.7.0 → invar_tools-1.8.0}/docs/proposals/completed/DX-63-contracts-first-enforcement.md +0 -0
  149. {invar_tools-1.7.0 → invar_tools-1.8.0}/docs/proposals/completed/LX-03-multi-agent-support.md +0 -0
  150. {invar_tools-1.7.0 → invar_tools-1.8.0}/docs/reference/agent-information-hierarchy.md +0 -0
  151. {invar_tools-1.7.0 → invar_tools-1.8.0}/docs/reference/architecture/index.md +0 -0
  152. {invar_tools-1.7.0 → invar_tools-1.8.0}/docs/reference/contracts/advanced.md +0 -0
  153. {invar_tools-1.7.0 → invar_tools-1.8.0}/docs/reference/contracts/completeness.md +0 -0
  154. {invar_tools-1.7.0 → invar_tools-1.8.0}/docs/reference/contracts/doctests.md +0 -0
  155. {invar_tools-1.7.0 → invar_tools-1.8.0}/docs/reference/contracts/index.md +0 -0
  156. {invar_tools-1.7.0 → invar_tools-1.8.0}/docs/reference/contracts/pre-post.md +0 -0
  157. {invar_tools-1.7.0 → invar_tools-1.8.0}/docs/reference/documentation.md +0 -0
  158. {invar_tools-1.7.0 → invar_tools-1.8.0}/docs/reference/index.md +0 -0
  159. {invar_tools-1.7.0 → invar_tools-1.8.0}/docs/reference/proposal-workflow.md +0 -0
  160. {invar_tools-1.7.0 → invar_tools-1.8.0}/docs/reference/rules/index.md +0 -0
  161. {invar_tools-1.7.0 → invar_tools-1.8.0}/docs/reference/rules/severity.md +0 -0
  162. {invar_tools-1.7.0 → invar_tools-1.8.0}/docs/reference/verification/crosshair-vs-hypothesis.md +0 -0
  163. {invar_tools-1.7.0 → invar_tools-1.8.0}/docs/reference/verification/index.md +0 -0
  164. {invar_tools-1.7.0 → invar_tools-1.8.0}/docs/reference/verification/smart-routing.md +0 -0
  165. {invar_tools-1.7.0 → invar_tools-1.8.0}/docs/reference/workflow/index.md +0 -0
  166. {invar_tools-1.7.0 → invar_tools-1.8.0}/docs/reference/workflow/session-start.md +0 -0
  167. {invar_tools-1.7.0 → invar_tools-1.8.0}/docs/reference/workflow/usbv.md +0 -0
  168. {invar_tools-1.7.0 → invar_tools-1.8.0}/docs/terminal-gif-guide.md +0 -0
  169. {invar_tools-1.7.0 → invar_tools-1.8.0}/docs/test-reports/DX-55-test-report.md +0 -0
  170. {invar_tools-1.7.0 → invar_tools-1.8.0}/docs/test-reports/DX-56-test-report.md +0 -0
  171. {invar_tools-1.7.0 → invar_tools-1.8.0}/docs/test-reports/DX-58-test-scenario.md +0 -0
  172. {invar_tools-1.7.0 → invar_tools-1.8.0}/docs/testing/v1.5.0-stress-test.md +0 -0
  173. {invar_tools-1.7.0 → invar_tools-1.8.0}/docs/testing/v1.5.0-test-report.md +0 -0
  174. {invar_tools-1.7.0 → invar_tools-1.8.0}/docs/testing/v1.5.0-workflow-compliance.md +0 -0
  175. {invar_tools-1.7.0 → invar_tools-1.8.0}/docs/vision.md +0 -0
  176. {invar_tools-1.7.0 → invar_tools-1.8.0}/runtime/LICENSE +0 -0
  177. {invar_tools-1.7.0 → invar_tools-1.8.0}/runtime/README.md +0 -0
  178. {invar_tools-1.7.0 → invar_tools-1.8.0}/runtime/pyproject.toml +0 -0
  179. {invar_tools-1.7.0 → invar_tools-1.8.0}/runtime/src/invar_runtime/__init__.py +0 -0
  180. {invar_tools-1.7.0 → invar_tools-1.8.0}/runtime/src/invar_runtime/contracts.py +0 -0
  181. {invar_tools-1.7.0 → invar_tools-1.8.0}/runtime/src/invar_runtime/decorators.py +0 -0
  182. {invar_tools-1.7.0 → invar_tools-1.8.0}/runtime/src/invar_runtime/invariant.py +0 -0
  183. {invar_tools-1.7.0 → invar_tools-1.8.0}/runtime/src/invar_runtime/relations.py +0 -0
  184. {invar_tools-1.7.0 → invar_tools-1.8.0}/runtime/src/invar_runtime/resource.py +0 -0
  185. {invar_tools-1.7.0 → invar_tools-1.8.0}/scripts/smart-guard.sh +0 -0
  186. {invar_tools-1.7.0 → invar_tools-1.8.0}/src/core/__init__.py +0 -0
  187. {invar_tools-1.7.0 → invar_tools-1.8.0}/src/invar/__init__.py +0 -0
  188. {invar_tools-1.7.0 → invar_tools-1.8.0}/src/invar/core/__init__.py +0 -0
  189. {invar_tools-1.7.0 → invar_tools-1.8.0}/src/invar/core/contracts.py +0 -0
  190. {invar_tools-1.7.0 → invar_tools-1.8.0}/src/invar/core/entry_points.py +0 -0
  191. {invar_tools-1.7.0 → invar_tools-1.8.0}/src/invar/core/extraction.py +0 -0
  192. {invar_tools-1.7.0 → invar_tools-1.8.0}/src/invar/core/format_specs.py +0 -0
  193. {invar_tools-1.7.0 → invar_tools-1.8.0}/src/invar/core/format_strategies.py +0 -0
  194. {invar_tools-1.7.0 → invar_tools-1.8.0}/src/invar/core/formatter.py +0 -0
  195. {invar_tools-1.7.0 → invar_tools-1.8.0}/src/invar/core/hypothesis_strategies.py +0 -0
  196. {invar_tools-1.7.0 → invar_tools-1.8.0}/src/invar/core/inspect.py +0 -0
  197. {invar_tools-1.7.0 → invar_tools-1.8.0}/src/invar/core/lambda_helpers.py +0 -0
  198. {invar_tools-1.7.0 → invar_tools-1.8.0}/src/invar/core/models.py +0 -0
  199. {invar_tools-1.7.0 → invar_tools-1.8.0}/src/invar/core/must_use.py +0 -0
  200. {invar_tools-1.7.0 → invar_tools-1.8.0}/src/invar/core/parser.py +0 -0
  201. {invar_tools-1.7.0 → invar_tools-1.8.0}/src/invar/core/patterns/__init__.py +0 -0
  202. {invar_tools-1.7.0 → invar_tools-1.8.0}/src/invar/core/patterns/detector.py +0 -0
  203. {invar_tools-1.7.0 → invar_tools-1.8.0}/src/invar/core/patterns/p0_exhaustive.py +0 -0
  204. {invar_tools-1.7.0 → invar_tools-1.8.0}/src/invar/core/patterns/p0_literal.py +0 -0
  205. {invar_tools-1.7.0 → invar_tools-1.8.0}/src/invar/core/patterns/p0_newtype.py +0 -0
  206. {invar_tools-1.7.0 → invar_tools-1.8.0}/src/invar/core/patterns/p0_nonempty.py +0 -0
  207. {invar_tools-1.7.0 → invar_tools-1.8.0}/src/invar/core/patterns/p0_validation.py +0 -0
  208. {invar_tools-1.7.0 → invar_tools-1.8.0}/src/invar/core/patterns/registry.py +0 -0
  209. {invar_tools-1.7.0 → invar_tools-1.8.0}/src/invar/core/patterns/types.py +0 -0
  210. {invar_tools-1.7.0 → invar_tools-1.8.0}/src/invar/core/postcondition_scope.py +0 -0
  211. {invar_tools-1.7.0 → invar_tools-1.8.0}/src/invar/core/property_gen.py +0 -0
  212. {invar_tools-1.7.0 → invar_tools-1.8.0}/src/invar/core/purity.py +0 -0
  213. {invar_tools-1.7.0 → invar_tools-1.8.0}/src/invar/core/purity_heuristics.py +0 -0
  214. {invar_tools-1.7.0 → invar_tools-1.8.0}/src/invar/core/references.py +0 -0
  215. {invar_tools-1.7.0 → invar_tools-1.8.0}/src/invar/core/review_trigger.py +0 -0
  216. {invar_tools-1.7.0 → invar_tools-1.8.0}/src/invar/core/rule_meta.py +0 -0
  217. {invar_tools-1.7.0 → invar_tools-1.8.0}/src/invar/core/rules.py +0 -0
  218. {invar_tools-1.7.0 → invar_tools-1.8.0}/src/invar/core/shell_analysis.py +0 -0
  219. {invar_tools-1.7.0 → invar_tools-1.8.0}/src/invar/core/shell_architecture.py +0 -0
  220. {invar_tools-1.7.0 → invar_tools-1.8.0}/src/invar/core/strategies.py +0 -0
  221. {invar_tools-1.7.0 → invar_tools-1.8.0}/src/invar/core/suggestions.py +0 -0
  222. {invar_tools-1.7.0 → invar_tools-1.8.0}/src/invar/core/sync_helpers.py +0 -0
  223. {invar_tools-1.7.0 → invar_tools-1.8.0}/src/invar/core/tautology.py +0 -0
  224. {invar_tools-1.7.0 → invar_tools-1.8.0}/src/invar/core/template_parser.py +0 -0
  225. {invar_tools-1.7.0 → invar_tools-1.8.0}/src/invar/core/timeout_inference.py +0 -0
  226. {invar_tools-1.7.0 → invar_tools-1.8.0}/src/invar/core/trivial_detection.py +0 -0
  227. {invar_tools-1.7.0 → invar_tools-1.8.0}/src/invar/core/verification_routing.py +0 -0
  228. {invar_tools-1.7.0 → invar_tools-1.8.0}/src/invar/mcp/__init__.py +0 -0
  229. {invar_tools-1.7.0 → invar_tools-1.8.0}/src/invar/mcp/__main__.py +0 -0
  230. {invar_tools-1.7.0 → invar_tools-1.8.0}/src/invar/mcp/server.py +0 -0
  231. {invar_tools-1.7.0 → invar_tools-1.8.0}/src/invar/py.typed +0 -0
  232. {invar_tools-1.7.0 → invar_tools-1.8.0}/src/invar/shell/__init__.py +0 -0
  233. {invar_tools-1.7.0 → invar_tools-1.8.0}/src/invar/shell/commands/__init__.py +0 -0
  234. {invar_tools-1.7.0 → invar_tools-1.8.0}/src/invar/shell/commands/guard.py +0 -0
  235. {invar_tools-1.7.0 → invar_tools-1.8.0}/src/invar/shell/commands/hooks.py +0 -0
  236. {invar_tools-1.7.0 → invar_tools-1.8.0}/src/invar/shell/commands/merge.py +0 -0
  237. {invar_tools-1.7.0 → invar_tools-1.8.0}/src/invar/shell/commands/mutate.py +0 -0
  238. {invar_tools-1.7.0 → invar_tools-1.8.0}/src/invar/shell/commands/perception.py +0 -0
  239. {invar_tools-1.7.0 → invar_tools-1.8.0}/src/invar/shell/commands/sync_self.py +0 -0
  240. {invar_tools-1.7.0 → invar_tools-1.8.0}/src/invar/shell/commands/template_sync.py +0 -0
  241. {invar_tools-1.7.0 → invar_tools-1.8.0}/src/invar/shell/commands/test.py +0 -0
  242. {invar_tools-1.7.0 → invar_tools-1.8.0}/src/invar/shell/commands/update.py +0 -0
  243. {invar_tools-1.7.0 → invar_tools-1.8.0}/src/invar/shell/config.py +0 -0
  244. {invar_tools-1.7.0 → invar_tools-1.8.0}/src/invar/shell/coverage.py +0 -0
  245. {invar_tools-1.7.0 → invar_tools-1.8.0}/src/invar/shell/fs.py +0 -0
  246. {invar_tools-1.7.0 → invar_tools-1.8.0}/src/invar/shell/git.py +0 -0
  247. {invar_tools-1.7.0 → invar_tools-1.8.0}/src/invar/shell/guard_helpers.py +0 -0
  248. {invar_tools-1.7.0 → invar_tools-1.8.0}/src/invar/shell/guard_output.py +0 -0
  249. {invar_tools-1.7.0 → invar_tools-1.8.0}/src/invar/shell/mcp_config.py +0 -0
  250. {invar_tools-1.7.0 → invar_tools-1.8.0}/src/invar/shell/mutation.py +0 -0
  251. {invar_tools-1.7.0 → invar_tools-1.8.0}/src/invar/shell/pattern_integration.py +0 -0
  252. {invar_tools-1.7.0 → invar_tools-1.8.0}/src/invar/shell/property_tests.py +0 -0
  253. {invar_tools-1.7.0 → invar_tools-1.8.0}/src/invar/shell/prove/__init__.py +0 -0
  254. {invar_tools-1.7.0 → invar_tools-1.8.0}/src/invar/shell/prove/accept.py +0 -0
  255. {invar_tools-1.7.0 → invar_tools-1.8.0}/src/invar/shell/prove/cache.py +0 -0
  256. {invar_tools-1.7.0 → invar_tools-1.8.0}/src/invar/shell/prove/crosshair.py +0 -0
  257. {invar_tools-1.7.0 → invar_tools-1.8.0}/src/invar/shell/prove/hypothesis.py +0 -0
  258. {invar_tools-1.7.0 → invar_tools-1.8.0}/src/invar/shell/subprocess_env.py +0 -0
  259. {invar_tools-1.7.0 → invar_tools-1.8.0}/src/invar/shell/template_engine.py +0 -0
  260. {invar_tools-1.7.0 → invar_tools-1.8.0}/src/invar/shell/testing.py +0 -0
  261. {invar_tools-1.7.0 → invar_tools-1.8.0}/src/invar/templates/CLAUDE.md.template +0 -0
  262. {invar_tools-1.7.0 → invar_tools-1.8.0}/src/invar/templates/__init__.py +0 -0
  263. {invar_tools-1.7.0 → invar_tools-1.8.0}/src/invar/templates/config/CLAUDE.md.jinja +0 -0
  264. {invar_tools-1.7.0 → invar_tools-1.8.0}/src/invar/templates/config/context.md.jinja +0 -0
  265. {invar_tools-1.7.0 → invar_tools-1.8.0}/src/invar/templates/context.md.template +0 -0
  266. {invar_tools-1.7.0 → invar_tools-1.8.0}/src/invar/templates/examples/README.md +0 -0
  267. {invar_tools-1.7.0 → invar_tools-1.8.0}/src/invar/templates/examples/conftest.py +0 -0
  268. {invar_tools-1.7.0 → invar_tools-1.8.0}/src/invar/templates/examples/contracts.py +0 -0
  269. {invar_tools-1.7.0 → invar_tools-1.8.0}/src/invar/templates/examples/core_shell.py +0 -0
  270. {invar_tools-1.7.0 → invar_tools-1.8.0}/src/invar/templates/examples/workflow.md +0 -0
  271. {invar_tools-1.7.0 → invar_tools-1.8.0}/src/invar/templates/hooks/PostToolUse.sh.jinja +0 -0
  272. {invar_tools-1.7.0 → invar_tools-1.8.0}/src/invar/templates/hooks/PreToolUse.sh.jinja +0 -0
  273. {invar_tools-1.7.0 → invar_tools-1.8.0}/src/invar/templates/hooks/Stop.sh.jinja +0 -0
  274. {invar_tools-1.7.0 → invar_tools-1.8.0}/src/invar/templates/hooks/UserPromptSubmit.sh.jinja +0 -0
  275. {invar_tools-1.7.0 → invar_tools-1.8.0}/src/invar/templates/hooks/__init__.py +0 -0
  276. {invar_tools-1.7.0 → invar_tools-1.8.0}/src/invar/templates/proposal.md.template +0 -0
  277. {invar_tools-1.7.0 → invar_tools-1.8.0}/src/invar/templates/protocol/INVAR.md +0 -0
  278. {invar_tools-1.7.0 → invar_tools-1.8.0}/src/shell/__init__.py +0 -0
  279. {invar_tools-1.7.0 → invar_tools-1.8.0}/tests/__init__.py +0 -0
  280. {invar_tools-1.7.0 → invar_tools-1.8.0}/tests/conftest.py +0 -0
  281. {invar_tools-1.7.0 → invar_tools-1.8.0}/tests/integration/__init__.py +0 -0
  282. {invar_tools-1.7.0 → invar_tools-1.8.0}/tests/integration/test_cli_flags.py +0 -0
  283. {invar_tools-1.7.0 → invar_tools-1.8.0}/tests/integration/test_dx55_regression.py +0 -0
  284. {invar_tools-1.7.0 → invar_tools-1.8.0}/tests/integration/test_dx56_sync.py +0 -0
  285. {invar_tools-1.7.0 → invar_tools-1.8.0}/tests/test_subprocess_env.py +0 -0
  286. {invar_tools-1.7.0 → invar_tools-1.8.0}/uv.lock +0 -0
@@ -1,6 +1,6 @@
1
1
  #!/bin/bash
2
2
  # Invar PostToolUse Hook
3
- # Protocol: v5.0 | Generated: 2025-12-29
3
+ # Protocol: v5.0 | Generated: 2025-12-30
4
4
  # DX-57: Git-based change detection with fallback
5
5
 
6
6
  TOOL_NAME="$1"
@@ -1,6 +1,6 @@
1
1
  #!/bin/bash
2
2
  # Invar PreToolUse Hook
3
- # Protocol: v5.0 | Generated: 2025-12-29
3
+ # Protocol: v5.0 | Generated: 2025-12-30
4
4
  # DX-57: Smart blocking with auto-escape for pytest/crosshair
5
5
 
6
6
  TOOL_NAME="$1"
@@ -1,6 +1,6 @@
1
1
  #!/bin/bash
2
2
  # Invar Stop Hook
3
- # Protocol: v5.0 | Generated: 2025-12-29
3
+ # Protocol: v5.0 | Generated: 2025-12-30
4
4
  # DX-57: Session cleanup and unverified changes warning
5
5
 
6
6
  # Use session-specific state
@@ -1,6 +1,6 @@
1
1
  #!/bin/bash
2
2
  # Invar UserPromptSubmit Hook
3
- # Protocol: v5.0 | Generated: 2025-12-29
3
+ # Protocol: v5.0 | Generated: 2025-12-30
4
4
  # DX-57: Protocol refresh with full INVAR.md injection
5
5
 
6
6
  USER_MESSAGE="$1"
@@ -340,6 +340,7 @@ invar guard # Full: static + doctests + CrossHair + Hypothesis
340
340
  invar guard --static # Static only (quick debug, ~0.5s)
341
341
  invar guard --changed # Modified files only
342
342
  invar guard --coverage # Collect branch coverage
343
+ invar guard -c # Contract coverage only (DX-63)
343
344
  invar sig <file> # Show contracts + signatures
344
345
  invar map --top 10 # Most-referenced symbols
345
346
  invar rules # List all rules with detection/hints (JSON)
@@ -10,9 +10,49 @@ _invar:
10
10
  # Development Mode
11
11
 
12
12
  > **Purpose:** Implement solution following USBV workflow with verification.
13
+ > **Mindset:** CONTRACTS before code — no exceptions.
14
+
15
+ ## Scope Boundaries
16
+
17
+ **This skill IS for:**
18
+ - Implementing features ("add", "create", "build")
19
+ - Fixing bugs ("fix", "resolve")
20
+ - Modifying existing code ("update", "change")
21
+ - Writing tests and contracts
22
+
23
+ **This skill is NOT for:**
24
+ - Exploring unclear requirements → switch to `/investigate`
25
+ - Choosing between approaches → switch to `/propose`
26
+ - Reviewing completed work → switch to `/review`
27
+
28
+ **Drift detection:** If requirements are unclear → STOP, exit to `/investigate` first.
13
29
 
14
30
  ## Entry Actions (REQUIRED)
15
31
 
32
+ ### Session Restore (if continuing from summary)
33
+
34
+ When conversation begins with a previous session summary:
35
+
36
+ 1. **ALWAYS display Check-In first** — even when continuing
37
+ 2. **Determine current phase** from todo items:
38
+ | Todo keywords | Phase |
39
+ |---------------|-------|
40
+ | "research", "understand", "analyze" | UNDERSTAND |
41
+ | "contract", "design", "specify" | SPECIFY |
42
+ | "implement", "code", "build" | BUILD |
43
+ | "verify", "test", "guard" | VALIDATE |
44
+ 3. **Display phase header** before resuming work
45
+ 4. **Re-read context.md** for project state
46
+
47
+ ```
48
+ # Example session restore:
49
+ ✓ Check-In: Invar | Main | dirty
50
+
51
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
52
+ 📍 /develop → BUILD (3/4) [resumed]
53
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
54
+ ```
55
+
16
56
  ### Context Refresh (DX-54)
17
57
 
18
58
  Before any workflow action:
@@ -106,6 +146,25 @@ If any NO → Stop. Write contract first.
106
146
 
107
147
  ### 3. BUILD
108
148
 
149
+ #### New Function Gate (MANDATORY)
150
+
151
+ **Before writing ANY new Core function, STOP and verify:**
152
+
153
+ | Check | If NO → Action |
154
+ |-------|----------------|
155
+ | Contract shown in SPECIFY phase? | ⛔ STOP. Return to SPECIFY. |
156
+ | Doctest written? | ⛔ STOP. Write doctest first. |
157
+
158
+ ```
159
+ ⛔ GATE VIOLATION: Writing new function without prior contract.
160
+ → Return to SPECIFY phase. Show contract first.
161
+ ```
162
+
163
+ **Exempt from gate:**
164
+ - Shell functions (no @pre/@post required)
165
+ - Editing existing functions (contract already exists)
166
+ - Non-Python files
167
+
109
168
  **For complex tasks:** Enter Plan Mode first, get user approval.
110
169
 
111
170
  **Implementation rules:**
@@ -11,6 +11,21 @@ _invar:
11
11
 
12
12
  > **Purpose:** Understand before acting. Gather information, analyze code, report findings.
13
13
 
14
+ ## Scope Boundaries
15
+
16
+ **This skill IS for:**
17
+ - Understanding vague or unclear tasks
18
+ - Analyzing existing code and architecture
19
+ - Researching before implementation
20
+ - Answering "why", "what", "how does" questions
21
+
22
+ **This skill is NOT for:**
23
+ - Writing or modifying code → switch to `/develop`
24
+ - Making design decisions → switch to `/propose`
25
+ - Reviewing code quality → switch to `/review`
26
+
27
+ **Drift detection:** If you find yourself wanting to edit files → STOP, exit to `/develop`.
28
+
14
29
  ## Constraints
15
30
 
16
31
  **FORBIDDEN in this phase:**
@@ -10,6 +10,35 @@ _invar:
10
10
  # Proposal Mode
11
11
 
12
12
  > **Purpose:** Facilitate human decision-making with clear options and trade-offs.
13
+ > **Mindset:** OPTIONS, not decisions — human chooses.
14
+
15
+ ## Scope Boundaries
16
+
17
+ **This skill IS for:**
18
+ - Presenting design choices with trade-offs
19
+ - Facilitating architectural decisions
20
+ - Comparing approaches (A vs B)
21
+ - Creating formal proposals for complex decisions
22
+
23
+ **This skill is NOT for:**
24
+ - Implementing the chosen option → switch to `/develop`
25
+ - Researching to understand the problem → switch to `/investigate`
26
+ - Reviewing existing code → switch to `/review`
27
+
28
+ **Drift detection:** If you find yourself writing implementation code → STOP, wait for user choice, then exit to `/develop`.
29
+
30
+ ## Constraints
31
+
32
+ **FORBIDDEN in this phase:**
33
+ - Writing implementation code (beyond examples)
34
+ - Making decisions for the user
35
+ - Creating files other than proposals
36
+ - Committing changes
37
+
38
+ **ALLOWED:**
39
+ - Read, Glob, Grep (research for options)
40
+ - invar_sig, invar_map (understand current state)
41
+ - Creating proposal documents in `docs/proposals/`
13
42
 
14
43
  ## Entry Actions
15
44
 
@@ -14,6 +14,21 @@ _invar:
14
14
  > **Success Metric:** Issues FOUND, not code approved. Zero issues = you failed to look hard enough.
15
15
  > **Workflow:** AUTOMATIC Reviewer↔Fixer loop until quality_met or max_rounds (no human confirmation).
16
16
 
17
+ ## Scope Boundaries
18
+
19
+ **This skill IS for:**
20
+ - Finding bugs and logic errors in existing code
21
+ - Verifying contract semantic value
22
+ - Auditing escape hatches
23
+ - Security review
24
+
25
+ **This skill is NOT for:**
26
+ - Implementing new features → switch to `/develop`
27
+ - Understanding how code works → switch to `/investigate`
28
+ - Deciding on architecture → switch to `/propose`
29
+
30
+ **Drift detection:** If you're writing significant new code (not fixes) → STOP, you're in wrong skill.
31
+
17
32
  ## Auto-Loop Configuration
18
33
 
19
34
  ```
@@ -264,6 +264,24 @@ pip install -e runtime/ # Runtime in dev mode
264
264
  Add your team conventions and project-specific rules below.
265
265
  This section is preserved across `invar update` and `invar dev sync`.
266
266
  ======================================================================== -->
267
+
268
+ ## Code Style
269
+
270
+ Run `ruff check --fix` frequently after changing code to fix lint issues before commit.
271
+
272
+ ## Session Restore
273
+
274
+ When continuing from a previous session summary:
275
+
276
+ 1. **ALWAYS display Check-In first**
277
+ 2. **Infer current phase** from todo keywords:
278
+ - "research/understand" → UNDERSTAND
279
+ - "contract/design" → SPECIFY
280
+ - "implement/code" → BUILD
281
+ - "verify/test" → VALIDATE
282
+ 3. **Display phase header** before resuming work
283
+ 4. **Re-read context.md** for project state
284
+
267
285
  <!--/invar:user-->
268
286
 
269
287
  ---
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: invar-tools
3
- Version: 1.7.0
3
+ Version: 1.8.0
4
4
  Summary: AI-native software engineering tools with design-by-contract verification
5
5
  Project-URL: Homepage, https://github.com/tefx/invar
6
6
  Project-URL: Documentation, https://github.com/tefx/invar#readme
@@ -28,6 +28,7 @@ Requires-Dist: jinja2>=3.0
28
28
  Requires-Dist: mcp>=1.0
29
29
  Requires-Dist: pre-commit>=3.0
30
30
  Requires-Dist: pydantic>=2.0
31
+ Requires-Dist: questionary>=2.0
31
32
  Requires-Dist: returns>=0.20
32
33
  Requires-Dist: rich>=13.0
33
34
  Requires-Dist: typer>=0.9
@@ -129,35 +130,25 @@ Guard passed.
129
130
 
130
131
  **Why uvx?** Always uses latest version, doesn't pollute project dependencies, auto-detects your project's venv.
131
132
 
132
- ### 🆕 New Project
133
+ ### 🎯 Setup
133
134
 
134
135
  ```bash
135
- # 1. Enter your project directory
136
136
  cd your-project
137
137
 
138
- # 2. Initialize with Claude Code (full experience)
139
- uvx invar-tools init --claude
138
+ # Interactive mode - choose what to install
139
+ uvx invar-tools init
140
140
 
141
- # 3. Add runtime contracts to your project
142
- pip install invar-runtime
143
- # Or add to pyproject.toml: dependencies = ["invar-runtime"]
141
+ # Or quick setup (skip prompts)
142
+ uvx invar-tools init --claude # Claude Code
143
+ uvx invar-tools init --pi # Pi Coding Agent
144
144
 
145
- # 4. Start coding with AI
145
+ # Add runtime contracts to your project
146
+ pip install invar-runtime
146
147
  ```
147
148
 
148
- ### 📁 Existing Project
149
-
150
- ```bash
151
- cd your-project
152
-
153
- # Update managed files, preserve your customizations
154
- uvx invar-tools init --claude
155
-
156
- # Or without Claude Code integration
157
- uvx invar-tools init
158
- ```
149
+ **Safe and idempotent** — Run `invar init` anytime. It always **merges** with existing files, preserving your content.
159
150
 
160
- Invar's init is idempotent—safe to run multiple times. It detects existing configuration and updates only managed regions.
151
+ > 💡 **After `claude /init`?** Just run `invar init` again to restore Invar configuration.
161
152
 
162
153
  ### 💬 Example Interaction
163
154
 
@@ -375,39 +366,71 @@ AlphaCodium · Parsel · Reflexion · Clover
375
366
 
376
367
  ---
377
368
 
378
- ## 🖥️ Platform Experience
369
+ ## 🖥️ Agent Support
379
370
 
380
- | Feature | Claude Code | Other Editors |
381
- |---------|-------------|---------------|
382
- | CLI verification (`invar guard`) | ✅ | |
383
- | Protocol document (INVAR.md) | ✅ | |
384
- | MCP tool integration | ✅ Auto-configured | Manual setup possible |
385
- | Workflow skills | Auto-configured | Include in system prompt |
386
- | Pre-commit hooks | ✅ | ✅ |
387
- | Sub-agent review | ✅ | — |
371
+ | Agent | Status | Setup |
372
+ |-------|--------|-------|
373
+ | **Claude Code** | ✅ Full | `invar init --claude` |
374
+ | **Pi** | ✅ Full | `invar init --pi` |
375
+ | **Cursor** | ✅ MCP | `invar init` select Other, add MCP config |
376
+ | **Other** | 📝 Manual | `invar init` → select Other, include `AGENT.md` in prompt |
388
377
 
389
- **Claude Code** provides the full experience—MCP tools, skill routing, and hooks are auto-configured by `invar init --claude`.
378
+ > **See also:** [Multi-Agent Guide](./docs/guides/multi-agent.md) for detailed integration instructions.
390
379
 
391
- **Other editors** can achieve similar results by:
392
- 1. Adding INVAR.md content to system prompts
393
- 2. Manually configuring MCP servers (if supported)
394
- 3. Using CLI commands for verification
380
+ ### Claude Code (Full Experience)
381
+
382
+ All features auto-configured:
383
+ - MCP tools (`invar_guard`, `invar_sig`, `invar_map`)
384
+ - Workflow skills (`/develop`, `/review`, `/investigate`, `/propose`)
385
+ - Claude Code hooks (tool guidance, verification reminders)
386
+ - Pre-commit hooks
387
+
388
+ ### Pi (Full Support)
389
+
390
+ Pi reads CLAUDE.md and .claude/skills/ directly, sharing configuration with Claude Code:
391
+ - **Same instruction file** — CLAUDE.md (no separate AGENT.md needed)
392
+ - **Same workflow skills** — .claude/skills/ work in Pi
393
+ - **Pi-specific hooks** — .pi/hooks/invar.ts for pytest blocking and protocol refresh
394
+ - **Protocol injection** — Long conversation support via `pi.send()`
395
+ - Pre-commit hooks
396
+
397
+ ### Cursor (MCP + Rules)
398
+
399
+ Cursor users get full verification via MCP:
400
+ - MCP tools (`invar_guard`, `invar_sig`, `invar_map`)
401
+ - .cursor/rules/ for USBV workflow guidance
402
+ - Hooks (beta) for pytest blocking
403
+ - Pre-commit hooks
404
+
405
+ > See [Cursor Guide](./docs/guides/cursor.md) for detailed setup.
406
+
407
+ ### Other Editors (Manual)
408
+
409
+ 1. Run `invar init` → select "Other (AGENT.md)"
410
+ 2. Include generated `AGENT.md` in your agent's prompt
411
+ 3. Configure MCP server if supported
412
+ 4. Use CLI commands (`invar guard`) for verification
395
413
 
396
414
  ---
397
415
 
398
416
  ## 📂 What Gets Installed
399
417
 
400
- `invar init --claude` creates:
418
+ `invar init` creates (select in interactive mode):
419
+
420
+ | File/Directory | Purpose | Category |
421
+ |----------------|---------|----------|
422
+ | `INVAR.md` | Protocol for AI agents | Required |
423
+ | `.invar/` | Config, context, examples | Required |
424
+ | `.pre-commit-config.yaml` | Verification before commit | Optional |
425
+ | `src/core/`, `src/shell/` | Recommended structure | Optional |
426
+ | `CLAUDE.md` | Agent instructions | Claude Code |
427
+ | `.claude/skills/` | Workflow automation | Claude Code |
428
+ | `.claude/commands/` | User commands (/audit, /guard) | Claude Code |
429
+ | `.claude/hooks/` | Tool guidance | Claude Code |
430
+ | `.mcp.json` | MCP server config | Claude Code |
431
+ | `AGENT.md` | Universal agent instructions | Other agents |
401
432
 
402
- | File/Directory | Purpose | Editable? |
403
- |----------------|---------|-----------|
404
- | `INVAR.md` | Protocol for AI agents | No (managed) |
405
- | `CLAUDE.md` | Project configuration | Yes |
406
- | `.claude/skills/` | Workflow skills | Yes |
407
- | `.claude/hooks/` | Tool call interception | Yes |
408
- | `.invar/examples/` | Reference patterns | No (managed) |
409
- | `.invar/context.md` | Project state, lessons | Yes |
410
- | `pyproject.toml` | `[tool.invar]` section | Yes |
433
+ **Note:** If `pyproject.toml` exists, Guard configuration goes there as `[tool.invar.guard]` instead of `.invar/config.toml`.
411
434
 
412
435
  **Recommended structure:**
413
436
 
@@ -473,7 +496,9 @@ rules = ["missing_contract", "shell_result"]
473
496
  | `invar guard` | Full verification (static + doctest + property + symbolic) |
474
497
  | `invar guard --changed` | Only git-modified files |
475
498
  | `invar guard --static` | Static analysis only (~0.5s) |
476
- | `invar init` | Initialize or update project |
499
+ | `invar init` | Initialize or update project (interactive) |
500
+ | `invar init --claude` | Quick setup for Claude Code |
501
+ | `invar uninstall` | Remove Invar from project (preserves user content) |
477
502
  | `invar sig <file>` | Show signatures and contracts |
478
503
  | `invar map` | Symbol map with reference counts |
479
504
  | `invar rules` | List all rules |
@@ -88,35 +88,25 @@ Guard passed.
88
88
 
89
89
  **Why uvx?** Always uses latest version, doesn't pollute project dependencies, auto-detects your project's venv.
90
90
 
91
- ### 🆕 New Project
91
+ ### 🎯 Setup
92
92
 
93
93
  ```bash
94
- # 1. Enter your project directory
95
94
  cd your-project
96
95
 
97
- # 2. Initialize with Claude Code (full experience)
98
- uvx invar-tools init --claude
96
+ # Interactive mode - choose what to install
97
+ uvx invar-tools init
99
98
 
100
- # 3. Add runtime contracts to your project
101
- pip install invar-runtime
102
- # Or add to pyproject.toml: dependencies = ["invar-runtime"]
99
+ # Or quick setup (skip prompts)
100
+ uvx invar-tools init --claude # Claude Code
101
+ uvx invar-tools init --pi # Pi Coding Agent
103
102
 
104
- # 4. Start coding with AI
103
+ # Add runtime contracts to your project
104
+ pip install invar-runtime
105
105
  ```
106
106
 
107
- ### 📁 Existing Project
108
-
109
- ```bash
110
- cd your-project
111
-
112
- # Update managed files, preserve your customizations
113
- uvx invar-tools init --claude
114
-
115
- # Or without Claude Code integration
116
- uvx invar-tools init
117
- ```
107
+ **Safe and idempotent** — Run `invar init` anytime. It always **merges** with existing files, preserving your content.
118
108
 
119
- Invar's init is idempotent—safe to run multiple times. It detects existing configuration and updates only managed regions.
109
+ > 💡 **After `claude /init`?** Just run `invar init` again to restore Invar configuration.
120
110
 
121
111
  ### 💬 Example Interaction
122
112
 
@@ -334,39 +324,71 @@ AlphaCodium · Parsel · Reflexion · Clover
334
324
 
335
325
  ---
336
326
 
337
- ## 🖥️ Platform Experience
327
+ ## 🖥️ Agent Support
338
328
 
339
- | Feature | Claude Code | Other Editors |
340
- |---------|-------------|---------------|
341
- | CLI verification (`invar guard`) | ✅ | |
342
- | Protocol document (INVAR.md) | ✅ | |
343
- | MCP tool integration | ✅ Auto-configured | Manual setup possible |
344
- | Workflow skills | Auto-configured | Include in system prompt |
345
- | Pre-commit hooks | ✅ | ✅ |
346
- | Sub-agent review | ✅ | — |
329
+ | Agent | Status | Setup |
330
+ |-------|--------|-------|
331
+ | **Claude Code** | ✅ Full | `invar init --claude` |
332
+ | **Pi** | ✅ Full | `invar init --pi` |
333
+ | **Cursor** | ✅ MCP | `invar init` select Other, add MCP config |
334
+ | **Other** | 📝 Manual | `invar init` → select Other, include `AGENT.md` in prompt |
347
335
 
348
- **Claude Code** provides the full experience—MCP tools, skill routing, and hooks are auto-configured by `invar init --claude`.
336
+ > **See also:** [Multi-Agent Guide](./docs/guides/multi-agent.md) for detailed integration instructions.
349
337
 
350
- **Other editors** can achieve similar results by:
351
- 1. Adding INVAR.md content to system prompts
352
- 2. Manually configuring MCP servers (if supported)
353
- 3. Using CLI commands for verification
338
+ ### Claude Code (Full Experience)
339
+
340
+ All features auto-configured:
341
+ - MCP tools (`invar_guard`, `invar_sig`, `invar_map`)
342
+ - Workflow skills (`/develop`, `/review`, `/investigate`, `/propose`)
343
+ - Claude Code hooks (tool guidance, verification reminders)
344
+ - Pre-commit hooks
345
+
346
+ ### Pi (Full Support)
347
+
348
+ Pi reads CLAUDE.md and .claude/skills/ directly, sharing configuration with Claude Code:
349
+ - **Same instruction file** — CLAUDE.md (no separate AGENT.md needed)
350
+ - **Same workflow skills** — .claude/skills/ work in Pi
351
+ - **Pi-specific hooks** — .pi/hooks/invar.ts for pytest blocking and protocol refresh
352
+ - **Protocol injection** — Long conversation support via `pi.send()`
353
+ - Pre-commit hooks
354
+
355
+ ### Cursor (MCP + Rules)
356
+
357
+ Cursor users get full verification via MCP:
358
+ - MCP tools (`invar_guard`, `invar_sig`, `invar_map`)
359
+ - .cursor/rules/ for USBV workflow guidance
360
+ - Hooks (beta) for pytest blocking
361
+ - Pre-commit hooks
362
+
363
+ > See [Cursor Guide](./docs/guides/cursor.md) for detailed setup.
364
+
365
+ ### Other Editors (Manual)
366
+
367
+ 1. Run `invar init` → select "Other (AGENT.md)"
368
+ 2. Include generated `AGENT.md` in your agent's prompt
369
+ 3. Configure MCP server if supported
370
+ 4. Use CLI commands (`invar guard`) for verification
354
371
 
355
372
  ---
356
373
 
357
374
  ## 📂 What Gets Installed
358
375
 
359
- `invar init --claude` creates:
376
+ `invar init` creates (select in interactive mode):
377
+
378
+ | File/Directory | Purpose | Category |
379
+ |----------------|---------|----------|
380
+ | `INVAR.md` | Protocol for AI agents | Required |
381
+ | `.invar/` | Config, context, examples | Required |
382
+ | `.pre-commit-config.yaml` | Verification before commit | Optional |
383
+ | `src/core/`, `src/shell/` | Recommended structure | Optional |
384
+ | `CLAUDE.md` | Agent instructions | Claude Code |
385
+ | `.claude/skills/` | Workflow automation | Claude Code |
386
+ | `.claude/commands/` | User commands (/audit, /guard) | Claude Code |
387
+ | `.claude/hooks/` | Tool guidance | Claude Code |
388
+ | `.mcp.json` | MCP server config | Claude Code |
389
+ | `AGENT.md` | Universal agent instructions | Other agents |
360
390
 
361
- | File/Directory | Purpose | Editable? |
362
- |----------------|---------|-----------|
363
- | `INVAR.md` | Protocol for AI agents | No (managed) |
364
- | `CLAUDE.md` | Project configuration | Yes |
365
- | `.claude/skills/` | Workflow skills | Yes |
366
- | `.claude/hooks/` | Tool call interception | Yes |
367
- | `.invar/examples/` | Reference patterns | No (managed) |
368
- | `.invar/context.md` | Project state, lessons | Yes |
369
- | `pyproject.toml` | `[tool.invar]` section | Yes |
391
+ **Note:** If `pyproject.toml` exists, Guard configuration goes there as `[tool.invar.guard]` instead of `.invar/config.toml`.
370
392
 
371
393
  **Recommended structure:**
372
394
 
@@ -432,7 +454,9 @@ rules = ["missing_contract", "shell_result"]
432
454
  | `invar guard` | Full verification (static + doctest + property + symbolic) |
433
455
  | `invar guard --changed` | Only git-modified files |
434
456
  | `invar guard --static` | Static analysis only (~0.5s) |
435
- | `invar init` | Initialize or update project |
457
+ | `invar init` | Initialize or update project (interactive) |
458
+ | `invar init --claude` | Quick setup for Claude Code |
459
+ | `invar uninstall` | Remove Invar from project (preserves user content) |
436
460
  | `invar sig <file>` | Show signatures and contracts |
437
461
  | `invar map` | Symbol map with reference counts |
438
462
  | `invar rules` | List all rules |
@@ -345,8 +345,7 @@ Invar provides MCP (Model Context Protocol) tools for deeper integration with Cl
345
345
  ### Setup
346
346
 
347
347
  ```bash
348
- uvx invar-tools init # Auto-creates .mcp.json at project root
349
- # or: invar init (if installed globally)
348
+ uvx invar-tools init # Interactive mode, auto-creates .mcp.json
350
349
  ```
351
350
 
352
351
  ### Available Tools
@@ -768,10 +768,11 @@ Create src/core and src/shell? [Y/n]
768
768
  **CLI Options:**
769
769
 
770
770
  ```bash
771
- invar init # Interactive, asks about directories
772
- invar init --dirs # Always create src/core, src/shell
773
- invar init --no-dirs # Never create directories
774
- invar init --config-only # Only add config, no INVAR.md/CLAUDE.md
771
+ invar init # Interactive mode with menus
772
+ invar init --claude # Auto-select Claude Code, skip prompts
773
+ invar init --preview # Show what would be done (dry run)
774
+ invar uninstall # Remove Invar from project (preserves user content)
775
+ invar uninstall --dry-run # Preview what would be removed
775
776
  ```
776
777
 
777
778
  ---