invar-tools 1.14.0__tar.gz → 1.15.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 (513) hide show
  1. {invar_tools-1.14.0 → invar_tools-1.15.0}/.invar/context.md +6 -4
  2. invar_tools-1.15.0/.serena/cache/python/document_symbols.pkl +0 -0
  3. invar_tools-1.15.0/.serena/cache/python/raw_document_symbols.pkl +0 -0
  4. {invar_tools-1.14.0 → invar_tools-1.15.0}/CHANGELOG.md +96 -1
  5. {invar_tools-1.14.0 → invar_tools-1.15.0}/CLAUDE.md +61 -13
  6. {invar_tools-1.14.0 → invar_tools-1.15.0}/PKG-INFO +6 -3
  7. {invar_tools-1.14.0 → invar_tools-1.15.0}/README.md +5 -2
  8. {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/guides/multi-agent.md +58 -2
  9. invar_tools-1.15.0/docs/proposals/DX-81-multi-agent-init.md +836 -0
  10. {invar_tools-1.14.0 → invar_tools-1.15.0}/pyproject.toml +1 -1
  11. {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/shell/commands/init.py +71 -41
  12. invar_tools-1.15.0/src/invar/shell/pi_tools.py +120 -0
  13. {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/templates/hooks/UserPromptSubmit.sh.jinja +31 -0
  14. {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/templates/hooks/pi/invar.ts.jinja +35 -1
  15. invar_tools-1.15.0/src/invar/templates/pi-tools/invar/index.ts +207 -0
  16. {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/templates/skills/invar-reflect/CONFIG.md +154 -29
  17. invar_tools-1.15.0/tests/experiments/dx74_attention_drift/scenario_v4/.serena/cache/python/document_symbols.pkl +0 -0
  18. invar_tools-1.15.0/tests/experiments/dx74_attention_drift/scenario_v4/.serena/cache/python/raw_document_symbols.pkl +0 -0
  19. invar_tools-1.15.0/typescript/packages/eslint-plugin/node_modules/.bin/acorn +17 -0
  20. invar_tools-1.15.0/typescript/packages/eslint-plugin/node_modules/.bin/eslint +17 -0
  21. invar_tools-1.15.0/typescript/packages/eslint-plugin/node_modules/.bin/tsc +17 -0
  22. invar_tools-1.15.0/typescript/packages/eslint-plugin/node_modules/.bin/tsserver +17 -0
  23. invar_tools-1.15.0/typescript/packages/fc-runner/node_modules/.bin/tsc +17 -0
  24. invar_tools-1.15.0/typescript/packages/fc-runner/node_modules/.bin/tsserver +17 -0
  25. invar_tools-1.15.0/typescript/packages/quick-check/node_modules/.bin/acorn +17 -0
  26. invar_tools-1.15.0/typescript/packages/quick-check/node_modules/.bin/eslint +17 -0
  27. invar_tools-1.15.0/typescript/packages/quick-check/node_modules/.bin/tsc +17 -0
  28. invar_tools-1.15.0/typescript/packages/quick-check/node_modules/.bin/tsserver +17 -0
  29. invar_tools-1.15.0/typescript/packages/ts-analyzer/node_modules/.bin/tsc +17 -0
  30. invar_tools-1.15.0/typescript/packages/ts-analyzer/node_modules/.bin/tsserver +17 -0
  31. {invar_tools-1.14.0 → invar_tools-1.15.0}/.aider.conf.yml +0 -0
  32. {invar_tools-1.14.0 → invar_tools-1.15.0}/.claude/commands/audit.md +0 -0
  33. {invar_tools-1.14.0 → invar_tools-1.15.0}/.claude/commands/guard.md +0 -0
  34. {invar_tools-1.14.0 → invar_tools-1.15.0}/.claude/hooks/PostToolUse.sh +0 -0
  35. {invar_tools-1.14.0 → invar_tools-1.15.0}/.claude/hooks/PreToolUse.sh +0 -0
  36. {invar_tools-1.14.0 → invar_tools-1.15.0}/.claude/hooks/Stop.sh +0 -0
  37. {invar_tools-1.14.0 → invar_tools-1.15.0}/.claude/hooks/UserPromptSubmit.sh +0 -0
  38. {invar_tools-1.14.0 → invar_tools-1.15.0}/.claude/hooks/invar.PostToolUse.sh +0 -0
  39. {invar_tools-1.14.0 → invar_tools-1.15.0}/.claude/hooks/invar.PreToolUse.sh +0 -0
  40. {invar_tools-1.14.0 → invar_tools-1.15.0}/.claude/hooks/invar.Stop.sh +0 -0
  41. {invar_tools-1.14.0 → invar_tools-1.15.0}/.claude/hooks/invar.UserPromptSubmit.sh +0 -0
  42. {invar_tools-1.14.0 → invar_tools-1.15.0}/.claude/skills/acceptance/SKILL.md +0 -0
  43. {invar_tools-1.14.0 → invar_tools-1.15.0}/.claude/skills/develop/SKILL.md +0 -0
  44. {invar_tools-1.14.0 → invar_tools-1.15.0}/.claude/skills/invar-onboard/SKILL.md +0 -0
  45. {invar_tools-1.14.0 → invar_tools-1.15.0}/.claude/skills/invar-onboard/patterns/python.md +0 -0
  46. {invar_tools-1.14.0 → invar_tools-1.15.0}/.claude/skills/invar-onboard/patterns/typescript.md +0 -0
  47. {invar_tools-1.14.0 → invar_tools-1.15.0}/.claude/skills/invar-onboard/templates/assessment.md.jinja +0 -0
  48. {invar_tools-1.14.0 → invar_tools-1.15.0}/.claude/skills/invar-onboard/templates/roadmap.md.jinja +0 -0
  49. {invar_tools-1.14.0 → invar_tools-1.15.0}/.claude/skills/invar-reflect/CONFIG.md +0 -0
  50. {invar_tools-1.14.0 → invar_tools-1.15.0}/.claude/skills/invar-reflect/SKILL.md +0 -0
  51. {invar_tools-1.14.0 → invar_tools-1.15.0}/.claude/skills/invar-reflect/template.md +0 -0
  52. {invar_tools-1.14.0 → invar_tools-1.15.0}/.claude/skills/investigate/SKILL.md +0 -0
  53. {invar_tools-1.14.0 → invar_tools-1.15.0}/.claude/skills/propose/SKILL.md +0 -0
  54. {invar_tools-1.14.0 → invar_tools-1.15.0}/.claude/skills/review/SKILL.md +0 -0
  55. {invar_tools-1.14.0 → invar_tools-1.15.0}/.claude/skills/security/SKILL.md +0 -0
  56. {invar_tools-1.14.0 → invar_tools-1.15.0}/.claude/skills/security/patterns/_common.yaml +0 -0
  57. {invar_tools-1.14.0 → invar_tools-1.15.0}/.claude/skills/security/patterns/python.yaml +0 -0
  58. {invar_tools-1.14.0 → invar_tools-1.15.0}/.claude/skills/security/patterns/typescript.yaml +0 -0
  59. {invar_tools-1.14.0 → invar_tools-1.15.0}/.cursorrules +0 -0
  60. {invar_tools-1.14.0 → invar_tools-1.15.0}/.github/workflows/ci.yml +0 -0
  61. {invar_tools-1.14.0 → invar_tools-1.15.0}/.github/workflows/publish.yml +0 -0
  62. {invar_tools-1.14.0 → invar_tools-1.15.0}/.gitignore +0 -0
  63. {invar_tools-1.14.0 → invar_tools-1.15.0}/.invar/archive/sessions-2025-12.md +0 -0
  64. {invar_tools-1.14.0 → invar_tools-1.15.0}/.invar/examples/README.md +0 -0
  65. {invar_tools-1.14.0 → invar_tools-1.15.0}/.invar/examples/conftest.py +0 -0
  66. {invar_tools-1.14.0 → invar_tools-1.15.0}/.invar/examples/contracts.py +0 -0
  67. {invar_tools-1.14.0 → invar_tools-1.15.0}/.invar/examples/core_shell.py +0 -0
  68. {invar_tools-1.14.0 → invar_tools-1.15.0}/.invar/examples/functional.py +0 -0
  69. {invar_tools-1.14.0 → invar_tools-1.15.0}/.invar/examples/workflow.md +0 -0
  70. {invar_tools-1.14.0 → invar_tools-1.15.0}/.invar/feedback/feedback-2026-01-03.md +0 -0
  71. {invar_tools-1.14.0 → invar_tools-1.15.0}/.invar/mcp-setup.md +0 -0
  72. {invar_tools-1.14.0 → invar_tools-1.15.0}/.invar/project-additions.md +0 -0
  73. {invar_tools-1.14.0 → invar_tools-1.15.0}/.invar/proposals/TEMPLATE.md +0 -0
  74. {invar_tools-1.14.0 → invar_tools-1.15.0}/.mcp.json +0 -0
  75. {invar_tools-1.14.0 → invar_tools-1.15.0}/.pre-commit-config.yaml +0 -0
  76. {invar_tools-1.14.0 → invar_tools-1.15.0}/.serena/.gitignore +0 -0
  77. {invar_tools-1.14.0 → invar_tools-1.15.0}/.serena/project.yml +0 -0
  78. {invar_tools-1.14.0 → invar_tools-1.15.0}/INVAR.md +0 -0
  79. {invar_tools-1.14.0 → invar_tools-1.15.0}/LICENSE +0 -0
  80. {invar_tools-1.14.0 → invar_tools-1.15.0}/LICENSE-GPL +0 -0
  81. {invar_tools-1.14.0 → invar_tools-1.15.0}/NOTICE +0 -0
  82. {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/.nojekyll +0 -0
  83. {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/agents.md +0 -0
  84. {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/design.md +0 -0
  85. {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/diagrams.md +0 -0
  86. {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/guide.md +0 -0
  87. {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/guides/aider.md +0 -0
  88. {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/guides/cline.md +0 -0
  89. {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/guides/continue.md +0 -0
  90. {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/guides/cursor.md +0 -0
  91. {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/guides/pi.md +0 -0
  92. {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/history/decisions-2024.md +0 -0
  93. {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/history/feedback/compliance-analysis.md +0 -0
  94. {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/history/feedback/feedback-memo.md +0 -0
  95. {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/history/feedback/index.md +0 -0
  96. {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/history/index.md +0 -0
  97. {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/history/original-vision.md +0 -0
  98. {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/history/protocol-evolution.md +0 -0
  99. {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/history/research/cruxeval-quick-validation.md +0 -0
  100. {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/index.html +0 -0
  101. {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/logo.svg +0 -0
  102. {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/proposals/DX-23-entry-point-detection.md +0 -0
  103. {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/proposals/DX-25-functional-patterns.md +0 -0
  104. {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/proposals/DX-29-pure-content-detection.md +0 -0
  105. {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/proposals/DX-38-contract-quality-rules.md +0 -0
  106. {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/proposals/DX-60-structured-rules-ssot.md +0 -0
  107. {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/proposals/DX-61-functional-pattern-guidance.md +0 -0
  108. {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/proposals/DX-61-implementation-design.md +0 -0
  109. {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/proposals/DX-62-proactive-reference-reading.md +0 -0
  110. {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/proposals/DX-68-agent-behavior-optimization.md +0 -0
  111. {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/proposals/DX-74-experiment-report.md +0 -0
  112. {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/proposals/DX-75-attention-aware-framework.md +0 -0
  113. {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/proposals/DX-78-mcp-protocol-sync.md +0 -0
  114. {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/proposals/DX-79-invar-usage-feedback.md +0 -0
  115. {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/proposals/DX-80-guard-cli-mcp-alignment.md +0 -0
  116. {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/proposals/LX-01-multi-language-feasibility.md +0 -0
  117. {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/proposals/LX-04-pi-agent-support.md +0 -0
  118. {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/proposals/LX-07-extension-skills.md +0 -0
  119. {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/proposals/LX-08-extension-skills-future.md +0 -0
  120. {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/proposals/LX-09-legacy-onboarding.md +0 -0
  121. {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/proposals/completed/2024-12-21-guard-enhancements.md +0 -0
  122. {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/proposals/completed/2024-12-21-language-inspired-enhancements.md +0 -0
  123. {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/proposals/completed/2024-12-21-test-first-enhancement.md +0 -0
  124. {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/proposals/completed/2025-12-21-dx-improvements.md +0 -0
  125. {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/proposals/completed/2025-12-23-dx-20-property-testing-enhancements.md +0 -0
  126. {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/proposals/completed/2025-12-23-dx-21-package-and-init.md +0 -0
  127. {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/proposals/completed/AGENT-IMPROVEMENTS.md +0 -0
  128. {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/proposals/completed/DX-11-documentation-restructure.md +0 -0
  129. {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/proposals/completed/DX-12-hypothesis-fallback.md +0 -0
  130. {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/proposals/completed/DX-13-incremental-prove.md +0 -0
  131. {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/proposals/completed/DX-14-expanded-prove-usage.md +0 -0
  132. {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/proposals/completed/DX-16-agent-tool-enforcement.md +0 -0
  133. {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/proposals/completed/DX-17-workflow-enforcement.md +0 -0
  134. {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/proposals/completed/DX-22-verification-strategy.md +0 -0
  135. {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/proposals/completed/DX-24-mechanism-documentation.md +0 -0
  136. {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/proposals/completed/DX-26-guard-simplification.md +0 -0
  137. {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/proposals/completed/DX-27-system-prompt-protocol.md +0 -0
  138. {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/proposals/completed/DX-28-semantic-verification.md +0 -0
  139. {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/proposals/completed/DX-30-visible-workflow.md +0 -0
  140. {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/proposals/completed/DX-31-adversarial-reviewer.md +0 -0
  141. {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/proposals/completed/DX-32-workflow-iteration.md +0 -0
  142. {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/proposals/completed/DX-33-verification-blind-spots.md +0 -0
  143. {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/proposals/completed/DX-34-review-cycle.md +0 -0
  144. {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/proposals/completed/DX-35-workflow-phase-separation.md +0 -0
  145. {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/proposals/completed/DX-36-documentation-restructuring.md +0 -0
  146. {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/proposals/completed/DX-37-coverage-integration.md +0 -0
  147. {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/proposals/completed/DX-39-workflow-efficiency.md +0 -0
  148. {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/proposals/completed/DX-40-smart-tool-redirect-hook.md +0 -0
  149. {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/proposals/completed/DX-41-automatic-review-orchestration.md +0 -0
  150. {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/proposals/completed/DX-42-workflow-auto-routing.md +0 -0
  151. {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/proposals/completed/DX-43-cross-platform-distribution.md +0 -0
  152. {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/proposals/completed/DX-45-template-consistency.md +0 -0
  153. {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/proposals/completed/DX-46-documentation-audit.md +0 -0
  154. {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/proposals/completed/DX-47-command-skill-naming.md +0 -0
  155. {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/proposals/completed/DX-48-code-structure-reorganization.md +0 -0
  156. {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/proposals/completed/DX-49-protocol-distribution-unification.md +0 -0
  157. {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/proposals/completed/DX-50-workflow-enforcement.md +0 -0
  158. {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/proposals/completed/DX-51-workflow-phase-visibility.md +0 -0
  159. {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/proposals/completed/DX-52-venv-dependency-injection.md +0 -0
  160. {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/proposals/completed/DX-53-review-loop-effectiveness.md +0 -0
  161. {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/proposals/completed/DX-54-agent-native-context-management.md +0 -0
  162. {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/proposals/completed/DX-55-claude-init-conflict-resolution.md +0 -0
  163. {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/proposals/completed/DX-56-template-sync-unification.md +0 -0
  164. {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/proposals/completed/DX-57-claude-code-hooks.md +0 -0
  165. {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/proposals/completed/DX-58-document-structure-optimization.md +0 -0
  166. {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/proposals/completed/DX-63-contracts-first-enforcement.md +0 -0
  167. {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/proposals/completed/DX-64-version-display-unification.md +0 -0
  168. {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/proposals/completed/DX-65-single-file-guard.md +0 -0
  169. {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/proposals/completed/DX-66-escape-hatch-visibility.md +0 -0
  170. {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/proposals/completed/DX-67-explicit-skill-invocation.md +0 -0
  171. {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/proposals/completed/DX-69-project-uninstall.md +0 -0
  172. {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/proposals/completed/DX-70-init-simplification.md +0 -0
  173. {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/proposals/completed/DX-70-review-isolation.md +0 -0
  174. {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/proposals/completed/DX-71-skill-command-simplification.md +0 -0
  175. {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/proposals/completed/DX-72-mandatory-self-review-detection.md +0 -0
  176. {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/proposals/completed/DX-74-tiered-attention-defense.md +0 -0
  177. {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/proposals/completed/DX-76-structured-document-query.md +0 -0
  178. {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/proposals/completed/DX-77-mcp-doc-tools-enhancements.md +0 -0
  179. {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/proposals/completed/LX-02-agent-portability-analysis.md +0 -0
  180. {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/proposals/completed/LX-03-multi-agent-support.md +0 -0
  181. {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/proposals/completed/LX-05-language-agnostic-protocol.md +0 -0
  182. {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/proposals/completed/LX-06-appendix-guard-comparison.md +0 -0
  183. {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/proposals/completed/LX-06-typescript-tooling.md +0 -0
  184. {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/proposals/completed/LX-09-legacy-onboarding.md +0 -0
  185. {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/proposals/completed/LX-10-typescript-size-limits.md +0 -0
  186. {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/proposals/index.md +0 -0
  187. {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/reference/agent-information-hierarchy.md +0 -0
  188. {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/reference/architecture/index.md +0 -0
  189. {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/reference/contracts/advanced.md +0 -0
  190. {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/reference/contracts/completeness.md +0 -0
  191. {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/reference/contracts/doctests.md +0 -0
  192. {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/reference/contracts/index.md +0 -0
  193. {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/reference/contracts/pre-post.md +0 -0
  194. {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/reference/documentation.md +0 -0
  195. {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/reference/index.md +0 -0
  196. {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/reference/proposal-workflow.md +0 -0
  197. {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/reference/rules/index.md +0 -0
  198. {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/reference/rules/severity.md +0 -0
  199. {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/reference/verification/crosshair-vs-hypothesis.md +0 -0
  200. {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/reference/verification/index.md +0 -0
  201. {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/reference/verification/smart-routing.md +0 -0
  202. {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/reference/workflow/index.md +0 -0
  203. {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/reference/workflow/session-start.md +0 -0
  204. {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/reference/workflow/usbv.md +0 -0
  205. {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/terminal-gif-guide.md +0 -0
  206. {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/test-reports/DX-55-test-report.md +0 -0
  207. {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/test-reports/DX-56-test-report.md +0 -0
  208. {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/test-reports/DX-58-test-scenario.md +0 -0
  209. {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/testing/v1.5.0-stress-test.md +0 -0
  210. {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/testing/v1.5.0-test-report.md +0 -0
  211. {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/testing/v1.5.0-workflow-compliance.md +0 -0
  212. {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/vision.md +0 -0
  213. {invar_tools-1.14.0 → invar_tools-1.15.0}/runtime/LICENSE +0 -0
  214. {invar_tools-1.14.0 → invar_tools-1.15.0}/runtime/README.md +0 -0
  215. {invar_tools-1.14.0 → invar_tools-1.15.0}/runtime/pyproject.toml +0 -0
  216. {invar_tools-1.14.0 → invar_tools-1.15.0}/runtime/src/invar_runtime/__init__.py +0 -0
  217. {invar_tools-1.14.0 → invar_tools-1.15.0}/runtime/src/invar_runtime/contracts.py +0 -0
  218. {invar_tools-1.14.0 → invar_tools-1.15.0}/runtime/src/invar_runtime/decorators.py +0 -0
  219. {invar_tools-1.14.0 → invar_tools-1.15.0}/runtime/src/invar_runtime/invariant.py +0 -0
  220. {invar_tools-1.14.0 → invar_tools-1.15.0}/runtime/src/invar_runtime/relations.py +0 -0
  221. {invar_tools-1.14.0 → invar_tools-1.15.0}/runtime/src/invar_runtime/resource.py +0 -0
  222. {invar_tools-1.14.0 → invar_tools-1.15.0}/scripts/embed_node_tools.py +0 -0
  223. {invar_tools-1.14.0 → invar_tools-1.15.0}/scripts/smart-guard.sh +0 -0
  224. {invar_tools-1.14.0 → invar_tools-1.15.0}/src/core/__init__.py +0 -0
  225. {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/__init__.py +0 -0
  226. {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/core/__init__.py +0 -0
  227. {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/core/contracts.py +0 -0
  228. {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/core/doc_edit.py +0 -0
  229. {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/core/doc_parser.py +0 -0
  230. {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/core/entry_points.py +0 -0
  231. {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/core/extraction.py +0 -0
  232. {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/core/feedback.py +0 -0
  233. {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/core/format_specs.py +0 -0
  234. {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/core/format_strategies.py +0 -0
  235. {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/core/formatter.py +0 -0
  236. {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/core/hypothesis_strategies.py +0 -0
  237. {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/core/inspect.py +0 -0
  238. {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/core/lambda_helpers.py +0 -0
  239. {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/core/language.py +0 -0
  240. {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/core/models.py +0 -0
  241. {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/core/must_use.py +0 -0
  242. {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/core/parser.py +0 -0
  243. {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/core/patterns/__init__.py +0 -0
  244. {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/core/patterns/detector.py +0 -0
  245. {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/core/patterns/p0_exhaustive.py +0 -0
  246. {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/core/patterns/p0_literal.py +0 -0
  247. {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/core/patterns/p0_newtype.py +0 -0
  248. {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/core/patterns/p0_nonempty.py +0 -0
  249. {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/core/patterns/p0_validation.py +0 -0
  250. {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/core/patterns/registry.py +0 -0
  251. {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/core/patterns/types.py +0 -0
  252. {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/core/postcondition_scope.py +0 -0
  253. {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/core/property_gen.py +0 -0
  254. {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/core/purity.py +0 -0
  255. {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/core/purity_heuristics.py +0 -0
  256. {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/core/references.py +0 -0
  257. {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/core/review_trigger.py +0 -0
  258. {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/core/rule_meta.py +0 -0
  259. {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/core/rules.py +0 -0
  260. {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/core/shell_analysis.py +0 -0
  261. {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/core/shell_architecture.py +0 -0
  262. {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/core/strategies.py +0 -0
  263. {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/core/suggestions.py +0 -0
  264. {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/core/sync_helpers.py +0 -0
  265. {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/core/tautology.py +0 -0
  266. {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/core/template_helpers.py +0 -0
  267. {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/core/template_parser.py +0 -0
  268. {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/core/timeout_inference.py +0 -0
  269. {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/core/trivial_detection.py +0 -0
  270. {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/core/ts_parsers.py +0 -0
  271. {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/core/ts_sig_parser.py +0 -0
  272. {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/core/utils.py +0 -0
  273. {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/core/verification_routing.py +0 -0
  274. {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/mcp/__init__.py +0 -0
  275. {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/mcp/__main__.py +0 -0
  276. {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/mcp/handlers.py +0 -0
  277. {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/mcp/server.py +0 -0
  278. {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/node_tools/MANIFEST +0 -0
  279. {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/node_tools/__init__.py +0 -0
  280. {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/node_tools/fc-runner/cli.js +0 -0
  281. {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/node_tools/quick-check/cli.js +0 -0
  282. {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/node_tools/ts-analyzer/cli.js +0 -0
  283. {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/node_tools/ts-query.js +0 -0
  284. {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/py.typed +0 -0
  285. {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/shell/__init__.py +0 -0
  286. {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/shell/claude_hooks.py +0 -0
  287. {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/shell/commands/__init__.py +0 -0
  288. {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/shell/commands/doc.py +0 -0
  289. {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/shell/commands/feedback.py +0 -0
  290. {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/shell/commands/guard.py +0 -0
  291. {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/shell/commands/hooks.py +0 -0
  292. {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/shell/commands/merge.py +0 -0
  293. {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/shell/commands/mutate.py +0 -0
  294. {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/shell/commands/perception.py +0 -0
  295. {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/shell/commands/skill.py +0 -0
  296. {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/shell/commands/sync_self.py +0 -0
  297. {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/shell/commands/template_sync.py +0 -0
  298. {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/shell/commands/test.py +0 -0
  299. {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/shell/commands/uninstall.py +0 -0
  300. {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/shell/commands/update.py +0 -0
  301. {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/shell/config.py +0 -0
  302. {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/shell/contract_coverage.py +0 -0
  303. {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/shell/coverage.py +0 -0
  304. {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/shell/doc_tools.py +0 -0
  305. {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/shell/fs.py +0 -0
  306. {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/shell/git.py +0 -0
  307. {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/shell/guard_helpers.py +0 -0
  308. {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/shell/guard_output.py +0 -0
  309. {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/shell/mcp_config.py +0 -0
  310. {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/shell/mutation.py +0 -0
  311. {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/shell/pattern_integration.py +0 -0
  312. {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/shell/pi_hooks.py +0 -0
  313. {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/shell/property_tests.py +0 -0
  314. {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/shell/prove/__init__.py +0 -0
  315. {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/shell/prove/accept.py +0 -0
  316. {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/shell/prove/cache.py +0 -0
  317. {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/shell/prove/crosshair.py +0 -0
  318. {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/shell/prove/guard_ts.py +0 -0
  319. {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/shell/prove/hypothesis.py +0 -0
  320. {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/shell/py_refs.py +0 -0
  321. {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/shell/skill_manager.py +0 -0
  322. {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/shell/subprocess_env.py +0 -0
  323. {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/shell/template_engine.py +0 -0
  324. {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/shell/templates.py +0 -0
  325. {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/shell/testing.py +0 -0
  326. {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/shell/ts_compiler.py +0 -0
  327. {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/templates/CLAUDE.md.template +0 -0
  328. {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/templates/__init__.py +0 -0
  329. {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/templates/claude-md/python/critical-rules.md +0 -0
  330. {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/templates/claude-md/python/quick-reference.md +0 -0
  331. {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/templates/claude-md/typescript/critical-rules.md +0 -0
  332. {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/templates/claude-md/typescript/quick-reference.md +0 -0
  333. {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/templates/claude-md/universal/check-in.md +0 -0
  334. {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/templates/claude-md/universal/skills.md +0 -0
  335. {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/templates/claude-md/universal/tool-selection.md +0 -0
  336. {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/templates/claude-md/universal/workflow.md +0 -0
  337. {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/templates/commands/audit.md.jinja +0 -0
  338. {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/templates/commands/guard.md +0 -0
  339. {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/templates/config/AGENT.md.jinja +0 -0
  340. {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/templates/config/CLAUDE.md.jinja +0 -0
  341. {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/templates/config/context.md.jinja +0 -0
  342. {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/templates/config/pre-commit.yaml.jinja +0 -0
  343. {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/templates/context.md.template +0 -0
  344. {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/templates/examples/python/README.md +0 -0
  345. {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/templates/examples/python/conftest.py +0 -0
  346. {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/templates/examples/python/contracts.py +0 -0
  347. {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/templates/examples/python/core_shell.py +0 -0
  348. {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/templates/examples/python/functional.py +0 -0
  349. {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/templates/examples/python/workflow.md +0 -0
  350. {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/templates/examples/typescript/README.md +0 -0
  351. {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/templates/examples/typescript/contracts.ts +0 -0
  352. {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/templates/examples/typescript/core_shell.ts +0 -0
  353. {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/templates/examples/typescript/functional.ts +0 -0
  354. {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/templates/examples/typescript/patterns.md +0 -0
  355. {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/templates/examples/typescript/workflow.md +0 -0
  356. {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/templates/hooks/PostToolUse.sh.jinja +0 -0
  357. {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/templates/hooks/PreToolUse.sh.jinja +0 -0
  358. {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/templates/hooks/Stop.sh.jinja +0 -0
  359. {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/templates/hooks/__init__.py +0 -0
  360. {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/templates/manifest.toml +0 -0
  361. {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/templates/onboard/assessment.md.jinja +0 -0
  362. {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/templates/onboard/patterns/python.md +0 -0
  363. {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/templates/onboard/patterns/typescript.md +0 -0
  364. {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/templates/onboard/roadmap.md.jinja +0 -0
  365. {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/templates/proposal.md.template +0 -0
  366. {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/templates/protocol/INVAR.md.jinja +0 -0
  367. {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/templates/protocol/python/architecture-examples.md +0 -0
  368. {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/templates/protocol/python/contracts-syntax.md +0 -0
  369. {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/templates/protocol/python/markers.md +0 -0
  370. {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/templates/protocol/python/tools.md +0 -0
  371. {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/templates/protocol/python/troubleshooting.md +0 -0
  372. {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/templates/protocol/typescript/architecture-examples.md +0 -0
  373. {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/templates/protocol/typescript/contracts-syntax.md +0 -0
  374. {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/templates/protocol/typescript/markers.md +0 -0
  375. {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/templates/protocol/typescript/tools.md +0 -0
  376. {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/templates/protocol/typescript/troubleshooting.md +0 -0
  377. {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/templates/protocol/universal/architecture.md +0 -0
  378. {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/templates/protocol/universal/completion.md +0 -0
  379. {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/templates/protocol/universal/contracts-concept.md +0 -0
  380. {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/templates/protocol/universal/header.md +0 -0
  381. {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/templates/protocol/universal/session.md +0 -0
  382. {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/templates/protocol/universal/six-laws.md +0 -0
  383. {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/templates/protocol/universal/usbv.md +0 -0
  384. {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/templates/protocol/universal/visible-workflow.md +0 -0
  385. {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/templates/skills/develop/SKILL.md.jinja +0 -0
  386. {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/templates/skills/extensions/_registry.yaml +0 -0
  387. {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/templates/skills/extensions/acceptance/SKILL.md +0 -0
  388. {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/templates/skills/extensions/invar-onboard/SKILL.md +0 -0
  389. {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/templates/skills/extensions/invar-onboard/patterns/python.md +0 -0
  390. {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/templates/skills/extensions/invar-onboard/patterns/typescript.md +0 -0
  391. {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/templates/skills/extensions/invar-onboard/templates/assessment.md.jinja +0 -0
  392. {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/templates/skills/extensions/invar-onboard/templates/roadmap.md.jinja +0 -0
  393. {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/templates/skills/extensions/security/SKILL.md +0 -0
  394. {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/templates/skills/extensions/security/patterns/_common.yaml +0 -0
  395. {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/templates/skills/extensions/security/patterns/python.yaml +0 -0
  396. {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/templates/skills/extensions/security/patterns/typescript.yaml +0 -0
  397. {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/templates/skills/invar-reflect/SKILL.md +0 -0
  398. {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/templates/skills/invar-reflect/template.md +0 -0
  399. {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/templates/skills/investigate/SKILL.md.jinja +0 -0
  400. {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/templates/skills/propose/SKILL.md.jinja +0 -0
  401. {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/templates/skills/review/SKILL.md.jinja +0 -0
  402. {invar_tools-1.14.0 → invar_tools-1.15.0}/src/shell/__init__.py +0 -0
  403. {invar_tools-1.14.0 → invar_tools-1.15.0}/tests/__init__.py +0 -0
  404. {invar_tools-1.14.0 → invar_tools-1.15.0}/tests/conftest.py +0 -0
  405. {invar_tools-1.14.0 → invar_tools-1.15.0}/tests/experiments/conftest.py +0 -0
  406. {invar_tools-1.14.0 → invar_tools-1.15.0}/tests/experiments/dx74_attention_drift/README.md +0 -0
  407. {invar_tools-1.14.0 → invar_tools-1.15.0}/tests/experiments/dx74_attention_drift/RESULTS.md +0 -0
  408. {invar_tools-1.14.0 → invar_tools-1.15.0}/tests/experiments/dx74_attention_drift/RESULTS_V2.md +0 -0
  409. {invar_tools-1.14.0 → invar_tools-1.15.0}/tests/experiments/dx74_attention_drift/RESULTS_V4.md +0 -0
  410. {invar_tools-1.14.0 → invar_tools-1.15.0}/tests/experiments/dx74_attention_drift/ground_truth.yaml +0 -0
  411. {invar_tools-1.14.0 → invar_tools-1.15.0}/tests/experiments/dx74_attention_drift/prompts.yaml +0 -0
  412. {invar_tools-1.14.0 → invar_tools-1.15.0}/tests/experiments/dx74_attention_drift/scenario/api_client.py +0 -0
  413. {invar_tools-1.14.0 → invar_tools-1.15.0}/tests/experiments/dx74_attention_drift/scenario/auth_service.py +0 -0
  414. {invar_tools-1.14.0 → invar_tools-1.15.0}/tests/experiments/dx74_attention_drift/scenario/config_manager.py +0 -0
  415. {invar_tools-1.14.0 → invar_tools-1.15.0}/tests/experiments/dx74_attention_drift/scenario/data_processor.py +0 -0
  416. {invar_tools-1.14.0 → invar_tools-1.15.0}/tests/experiments/dx74_attention_drift/scenario/file_handler.py +0 -0
  417. {invar_tools-1.14.0 → invar_tools-1.15.0}/tests/experiments/dx74_attention_drift/scenario/utils.py +0 -0
  418. {invar_tools-1.14.0 → invar_tools-1.15.0}/tests/experiments/dx74_attention_drift/scenario_v2/analytics_engine.py +0 -0
  419. {invar_tools-1.14.0 → invar_tools-1.15.0}/tests/experiments/dx74_attention_drift/scenario_v2/ground_truth.yaml +0 -0
  420. {invar_tools-1.14.0 → invar_tools-1.15.0}/tests/experiments/dx74_attention_drift/scenario_v2/inventory_manager.py +0 -0
  421. {invar_tools-1.14.0 → invar_tools-1.15.0}/tests/experiments/dx74_attention_drift/scenario_v2/notification_service.py +0 -0
  422. {invar_tools-1.14.0 → invar_tools-1.15.0}/tests/experiments/dx74_attention_drift/scenario_v2/order_processor.py +0 -0
  423. {invar_tools-1.14.0 → invar_tools-1.15.0}/tests/experiments/dx74_attention_drift/scenario_v2/payment_gateway.py +0 -0
  424. {invar_tools-1.14.0 → invar_tools-1.15.0}/tests/experiments/dx74_attention_drift/scenario_v2/user_service.py +0 -0
  425. {invar_tools-1.14.0 → invar_tools-1.15.0}/tests/experiments/dx74_attention_drift/scenario_v3/README.md +0 -0
  426. {invar_tools-1.14.0 → invar_tools-1.15.0}/tests/experiments/dx74_attention_drift/scenario_v3/cache_service.py +0 -0
  427. {invar_tools-1.14.0 → invar_tools-1.15.0}/tests/experiments/dx74_attention_drift/scenario_v3/calculator.py +0 -0
  428. {invar_tools-1.14.0 → invar_tools-1.15.0}/tests/experiments/dx74_attention_drift/scenario_v3/data_processor.py +0 -0
  429. {invar_tools-1.14.0 → invar_tools-1.15.0}/tests/experiments/dx74_attention_drift/scenario_v3/ground_truth.yaml +0 -0
  430. {invar_tools-1.14.0 → invar_tools-1.15.0}/tests/experiments/dx74_attention_drift/scenario_v3/user_manager.py +0 -0
  431. {invar_tools-1.14.0 → invar_tools-1.15.0}/tests/experiments/dx74_attention_drift/scenario_v3/validator.py +0 -0
  432. {invar_tools-1.14.0 → invar_tools-1.15.0}/tests/experiments/dx74_attention_drift/scenario_v4/.serena/.gitignore +0 -0
  433. {invar_tools-1.14.0 → invar_tools-1.15.0}/tests/experiments/dx74_attention_drift/scenario_v4/.serena/project.yml +0 -0
  434. {invar_tools-1.14.0 → invar_tools-1.15.0}/tests/experiments/dx74_attention_drift/scenario_v4/README.md +0 -0
  435. {invar_tools-1.14.0 → invar_tools-1.15.0}/tests/experiments/dx74_attention_drift/scenario_v4/config_manager.py +0 -0
  436. {invar_tools-1.14.0 → invar_tools-1.15.0}/tests/experiments/dx74_attention_drift/scenario_v4/data_service.py +0 -0
  437. {invar_tools-1.14.0 → invar_tools-1.15.0}/tests/experiments/dx74_attention_drift/scenario_v4/ground_truth.yaml +0 -0
  438. {invar_tools-1.14.0 → invar_tools-1.15.0}/tests/experiments/dx74_attention_drift/scenario_v4/math_utils.py +0 -0
  439. {invar_tools-1.14.0 → invar_tools-1.15.0}/tests/experiments/dx74_attention_drift/scenario_v4/report_generator.py +0 -0
  440. {invar_tools-1.14.0 → invar_tools-1.15.0}/tests/experiments/dx74_attention_drift/scenario_v4/user_auth.py +0 -0
  441. {invar_tools-1.14.0 → invar_tools-1.15.0}/tests/experiments/dx74_attention_drift/scenario_v5/api_gateway.py +0 -0
  442. {invar_tools-1.14.0 → invar_tools-1.15.0}/tests/experiments/dx74_attention_drift/scenario_v5/auth_service.py +0 -0
  443. {invar_tools-1.14.0 → invar_tools-1.15.0}/tests/experiments/dx74_attention_drift/scenario_v5/cache_handler.py +0 -0
  444. {invar_tools-1.14.0 → invar_tools-1.15.0}/tests/experiments/dx74_attention_drift/scenario_v5/config_loader.py +0 -0
  445. {invar_tools-1.14.0 → invar_tools-1.15.0}/tests/experiments/dx74_attention_drift/scenario_v5/data_validator.py +0 -0
  446. {invar_tools-1.14.0 → invar_tools-1.15.0}/tests/experiments/dx74_attention_drift/scenario_v5/ground_truth.yaml +0 -0
  447. {invar_tools-1.14.0 → invar_tools-1.15.0}/tests/experiments/dx74_attention_drift/scenario_v5/metrics_collector.py +0 -0
  448. {invar_tools-1.14.0 → invar_tools-1.15.0}/tests/experiments/dx74_attention_drift/scenario_v5/notification_service.py +0 -0
  449. {invar_tools-1.14.0 → invar_tools-1.15.0}/tests/experiments/dx74_attention_drift/scenario_v5/payment_processor.py +0 -0
  450. {invar_tools-1.14.0 → invar_tools-1.15.0}/tests/experiments/dx74_attention_drift/scenario_v5/report_builder.py +0 -0
  451. {invar_tools-1.14.0 → invar_tools-1.15.0}/tests/experiments/dx74_attention_drift/scenario_v5/task_scheduler.py +0 -0
  452. {invar_tools-1.14.0 → invar_tools-1.15.0}/tests/experiments/dx74_attention_drift/scenario_v5/user_manager.py +0 -0
  453. {invar_tools-1.14.0 → invar_tools-1.15.0}/tests/experiments/dx74_attention_drift/scenario_v5/utils.py +0 -0
  454. {invar_tools-1.14.0 → invar_tools-1.15.0}/tests/experiments/dx74_attention_drift/scenario_v6/api_gateway.py +0 -0
  455. {invar_tools-1.14.0 → invar_tools-1.15.0}/tests/experiments/dx74_attention_drift/scenario_v6/auth_service.py +0 -0
  456. {invar_tools-1.14.0 → invar_tools-1.15.0}/tests/experiments/dx74_attention_drift/scenario_v6/cache_handler.py +0 -0
  457. {invar_tools-1.14.0 → invar_tools-1.15.0}/tests/experiments/dx74_attention_drift/scenario_v6/config_loader.py +0 -0
  458. {invar_tools-1.14.0 → invar_tools-1.15.0}/tests/experiments/dx74_attention_drift/scenario_v6/data_validator.py +0 -0
  459. {invar_tools-1.14.0 → invar_tools-1.15.0}/tests/experiments/dx74_attention_drift/scenario_v6/ground_truth.yaml +0 -0
  460. {invar_tools-1.14.0 → invar_tools-1.15.0}/tests/experiments/dx74_attention_drift/scenario_v6/metrics_collector.py +0 -0
  461. {invar_tools-1.14.0 → invar_tools-1.15.0}/tests/experiments/dx74_attention_drift/scenario_v6/notification_service.py +0 -0
  462. {invar_tools-1.14.0 → invar_tools-1.15.0}/tests/experiments/dx74_attention_drift/scenario_v6/payment_processor.py +0 -0
  463. {invar_tools-1.14.0 → invar_tools-1.15.0}/tests/experiments/dx74_attention_drift/scenario_v6/report_builder.py +0 -0
  464. {invar_tools-1.14.0 → invar_tools-1.15.0}/tests/experiments/dx74_attention_drift/scenario_v6/task_scheduler.py +0 -0
  465. {invar_tools-1.14.0 → invar_tools-1.15.0}/tests/experiments/dx74_attention_drift/scenario_v6/user_manager.py +0 -0
  466. {invar_tools-1.14.0 → invar_tools-1.15.0}/tests/experiments/dx74_attention_drift/scenario_v6/utils.py +0 -0
  467. {invar_tools-1.14.0 → invar_tools-1.15.0}/tests/experiments/dx74_attention_drift/scenario_v7/api_service.py +0 -0
  468. {invar_tools-1.14.0 → invar_tools-1.15.0}/tests/experiments/dx74_attention_drift/scenario_v7/auth_manager.py +0 -0
  469. {invar_tools-1.14.0 → invar_tools-1.15.0}/tests/experiments/dx74_attention_drift/scenario_v7/data_processor.py +0 -0
  470. {invar_tools-1.14.0 → invar_tools-1.15.0}/tests/experiments/dx74_attention_drift/scenario_v7/ground_truth.yaml +0 -0
  471. {invar_tools-1.14.0 → invar_tools-1.15.0}/tests/experiments/dx74_attention_drift/scenario_v7/report_engine.py +0 -0
  472. {invar_tools-1.14.0 → invar_tools-1.15.0}/tests/experiments/dx74_attention_drift/scenario_v7/storage_handler.py +0 -0
  473. {invar_tools-1.14.0 → invar_tools-1.15.0}/tests/experiments/dx74_attention_drift/scenario_v7/utils.py +0 -0
  474. {invar_tools-1.14.0 → invar_tools-1.15.0}/tests/integration/__init__.py +0 -0
  475. {invar_tools-1.14.0 → invar_tools-1.15.0}/tests/integration/test_cli_flags.py +0 -0
  476. {invar_tools-1.14.0 → invar_tools-1.15.0}/tests/integration/test_dx55_regression.py +0 -0
  477. {invar_tools-1.14.0 → invar_tools-1.15.0}/tests/integration/test_dx56_sync.py +0 -0
  478. {invar_tools-1.14.0 → invar_tools-1.15.0}/tests/integration/test_dx78_ts_compiler.py +0 -0
  479. {invar_tools-1.14.0 → invar_tools-1.15.0}/tests/integration/test_lx05_detection.py +0 -0
  480. {invar_tools-1.14.0 → invar_tools-1.15.0}/tests/integration/test_lx05_integration.py +0 -0
  481. {invar_tools-1.14.0 → invar_tools-1.15.0}/tests/integration/test_lx05_templates.py +0 -0
  482. {invar_tools-1.14.0 → invar_tools-1.15.0}/tests/integration/test_lx06_typescript.py +0 -0
  483. {invar_tools-1.14.0 → invar_tools-1.15.0}/tests/integration/test_lx07_skills.py +0 -0
  484. {invar_tools-1.14.0 → invar_tools-1.15.0}/tests/integration/test_mcp_doc_tools.py +0 -0
  485. {invar_tools-1.14.0 → invar_tools-1.15.0}/tests/test_subprocess_env.py +0 -0
  486. {invar_tools-1.14.0 → invar_tools-1.15.0}/typescript/.gitignore +0 -0
  487. {invar_tools-1.14.0 → invar_tools-1.15.0}/typescript/README.md +0 -0
  488. {invar_tools-1.14.0 → invar_tools-1.15.0}/typescript/package.json +0 -0
  489. {invar_tools-1.14.0 → invar_tools-1.15.0}/typescript/packages/eslint-plugin/package.json +0 -0
  490. {invar_tools-1.14.0 → invar_tools-1.15.0}/typescript/packages/eslint-plugin/src/index.ts +0 -0
  491. {invar_tools-1.14.0 → invar_tools-1.15.0}/typescript/packages/eslint-plugin/src/rules/no-any-in-schema.ts +0 -0
  492. {invar_tools-1.14.0 → invar_tools-1.15.0}/typescript/packages/eslint-plugin/src/rules/no-io-in-core.ts +0 -0
  493. {invar_tools-1.14.0 → invar_tools-1.15.0}/typescript/packages/eslint-plugin/src/rules/require-jsdoc-example.ts +0 -0
  494. {invar_tools-1.14.0 → invar_tools-1.15.0}/typescript/packages/eslint-plugin/src/rules/require-schema-validation.ts +0 -0
  495. {invar_tools-1.14.0 → invar_tools-1.15.0}/typescript/packages/eslint-plugin/src/rules/shell-result-type.ts +0 -0
  496. {invar_tools-1.14.0 → invar_tools-1.15.0}/typescript/packages/eslint-plugin/tsconfig.json +0 -0
  497. {invar_tools-1.14.0 → invar_tools-1.15.0}/typescript/packages/fc-runner/package.json +0 -0
  498. {invar_tools-1.14.0 → invar_tools-1.15.0}/typescript/packages/fc-runner/src/cli.ts +0 -0
  499. {invar_tools-1.14.0 → invar_tools-1.15.0}/typescript/packages/fc-runner/src/index.ts +0 -0
  500. {invar_tools-1.14.0 → invar_tools-1.15.0}/typescript/packages/fc-runner/tsconfig.json +0 -0
  501. {invar_tools-1.14.0 → invar_tools-1.15.0}/typescript/packages/quick-check/package.json +0 -0
  502. {invar_tools-1.14.0 → invar_tools-1.15.0}/typescript/packages/quick-check/src/cli.ts +0 -0
  503. {invar_tools-1.14.0 → invar_tools-1.15.0}/typescript/packages/quick-check/src/index.ts +0 -0
  504. {invar_tools-1.14.0 → invar_tools-1.15.0}/typescript/packages/quick-check/tsconfig.json +0 -0
  505. {invar_tools-1.14.0 → invar_tools-1.15.0}/typescript/packages/ts-analyzer/package.json +0 -0
  506. {invar_tools-1.14.0 → invar_tools-1.15.0}/typescript/packages/ts-analyzer/src/cli.ts +0 -0
  507. {invar_tools-1.14.0 → invar_tools-1.15.0}/typescript/packages/ts-analyzer/src/index.ts +0 -0
  508. {invar_tools-1.14.0 → invar_tools-1.15.0}/typescript/packages/ts-analyzer/tsconfig.json +0 -0
  509. {invar_tools-1.14.0 → invar_tools-1.15.0}/typescript/pnpm-workspace.yaml +0 -0
  510. {invar_tools-1.14.0 → invar_tools-1.15.0}/typescript/scripts/bundle.mjs +0 -0
  511. {invar_tools-1.14.0 → invar_tools-1.15.0}/typescript/tsconfig.base.json +0 -0
  512. {invar_tools-1.14.0 → invar_tools-1.15.0}/typescript/vitest.config.ts +0 -0
  513. {invar_tools-1.14.0 → invar_tools-1.15.0}/uv.lock +0 -0
@@ -51,17 +51,17 @@
51
51
 
52
52
  ## Current State
53
53
 
54
- - **PyPI:** `invar-tools` v1.12.0 + `invar-runtime` v1.3.0
54
+ - **PyPI:** `invar-tools` v1.14.0 + `invar-runtime` v1.3.0
55
55
  - **Protocol:** v5.0 (USBV workflow, DX-58 critical section)
56
- - **Status:** Feature complete, TypeScript support added (DX-78)
57
- - **Recent:** DX-78 (TypeScript Compiler API integration), LX-05 (language-agnostic), LX-06 (TypeScript tooling), LX-07 (Extension Skills)
56
+ - **Status:** Feature complete, multi-agent support added (DX-81)
57
+ - **Recent:** DX-81 (Multi-agent init support), DX-79 (Feedback collection), DX-78 (TypeScript Compiler API)
58
58
  - **Blockers:** None
59
59
 
60
60
  ## Active Work
61
61
 
62
62
  See [docs/proposals/](../docs/proposals/) for planned changes.
63
63
 
64
- **Current focus:** Extension Skills completion, TypeScript verification
64
+ **Current focus:** DX-81 (Multi-agent init) completed, ready for v1.15.0 release
65
65
 
66
66
  ---
67
67
 
@@ -185,6 +185,8 @@ gh release create vX.Y.Z --title "vX.Y.Z - Title" --notes "..."
185
185
 
186
186
  | Version | Date | Highlights |
187
187
  |---------|------|------------|
188
+ | 1.15.0 | 2026-01 | Multi-agent init support (DX-81), checkbox selection UI |
189
+ | 1.14.0 | 2026-01 | Invar usage feedback collection (DX-79), anonymization tools |
188
190
  | 1.12.0 | 2026-01 | TypeScript Compiler API integration (DX-78), multi-language refs |
189
191
  | 1.9.0 | 2026-01 | Extension Skills (LX-07), TypeScript support (LX-05/06) |
190
192
  | 1.8.0 | 2025-12 | Claude hooks improvements, interactive init (DX-70) |
@@ -7,6 +7,99 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [1.15.0] - 2026-01-03
11
+
12
+ ### Added
13
+ - **DX-81: Multi-Agent Init Support** - Complete implementation
14
+ - Remove mutual exclusivity between `--claude` and `--pi` flags
15
+ - Support combined flags: `invar init --claude --pi`
16
+ - Install both `.claude/hooks/` and `.pi/hooks/` simultaneously
17
+ - **Interactive mode enhancement**:
18
+ - Changed from single-select to checkbox multi-select
19
+ - Allow selecting multiple agents with Space key
20
+ - Claude Code pre-checked as default
21
+ - **Backward compatibility maintained**:
22
+ - `invar init --claude` works as before (Claude only)
23
+ - `invar init --pi` works as before (Pi only)
24
+ - Sequential init (`--claude` then `--pi`) still works
25
+ - **Use cases enabled**:
26
+ - Team collaboration (different members use different agents)
27
+ - Agent switching (both configured, use either)
28
+ - Open source projects (contributors have agent choice)
29
+ - **DX-79: Message Count Auto-Trigger for /invar-reflect** - Cross-platform feedback automation
30
+ - Automatic feedback reminder at configurable message threshold (default: 30)
31
+ - **Claude Code implementation**: UserPromptSubmit hook with jq config parsing
32
+ - **Pi implementation**: TypeScript hook with fs config reading
33
+ - **Shared configuration**: Both read `.claude/settings.local.json` feedback section
34
+ - **User control**: Disable via `feedback.enabled=false` or adjust `min_messages` threshold
35
+ - Replaces unimplemented PostTaskCompletion hook with simpler, universally-supported approach
36
+ - **Pi Custom Tools for Invar** - Native tool integration without CLI dependency
37
+ - `invar_guard`: Smart verification wrapper (static + doctests + symbolic)
38
+ - `invar_sig`: Show function signatures and contracts
39
+ - `invar_map`: Symbol map with reference counts
40
+ - Auto-installed via `invar init --pi` in `.pi/tools/invar/index.ts`
41
+ - Pi auto-discovers tools, no configuration needed
42
+ - Solves problem of Pi agents not actively using invar tools (falling back to pytest/grep)
43
+
44
+ ### Changed
45
+ - Agent selection prompt now uses checkbox instead of radio buttons
46
+ - Header shows "Claude Code + Pi" when both flags used
47
+ - File selection logic builds from all selected agents' categories
48
+
49
+ ### Fixed
50
+ - **Security hardening in Pi templates** (3-round adversarial review)
51
+ - Path injection defense with comprehensive shell metacharacter blocking
52
+ - TOCTOU race condition eliminated in config reading
53
+ - Runtime type validation for external inputs
54
+ - ES module consistency (no CommonJS mixing)
55
+
56
+ ### Documentation
57
+ - Updated README.md with multi-agent examples
58
+ - Added Multi-Agent Support section to CLAUDE.md
59
+ - Updated context.md to reflect DX-81 completion
60
+
61
+ ### Added
62
+ - **DX-81: Multi-Agent Init Support** - Complete implementation
63
+ - Remove mutual exclusivity between `--claude` and `--pi` flags
64
+ - Support combined flags: `invar init --claude --pi`
65
+ - Install both `.claude/hooks/` and `.pi/hooks/` simultaneously
66
+ - **Interactive mode enhancement**:
67
+ - Changed from single-select to checkbox multi-select
68
+ - Allow selecting multiple agents with Space key
69
+ - Claude Code pre-checked as default
70
+ - **Backward compatibility maintained**:
71
+ - `invar init --claude` works as before (Claude only)
72
+ - `invar init --pi` works as before (Pi only)
73
+ - Sequential init (`--claude` then `--pi`) still works
74
+ - **Use cases enabled**:
75
+ - Team collaboration (different members use different agents)
76
+ - Agent switching (both configured, use either)
77
+ - Open source projects (contributors have agent choice)
78
+ - **DX-79: Message Count Auto-Trigger for /invar-reflect** - Cross-platform feedback automation
79
+ - Automatic feedback reminder at configurable message threshold (default: 30)
80
+ - **Claude Code implementation**: UserPromptSubmit hook with jq config parsing
81
+ - **Pi implementation**: TypeScript hook with fs config reading
82
+ - **Shared configuration**: Both read `.claude/settings.local.json` feedback section
83
+ - **User control**: Disable via `feedback.enabled=false` or adjust `min_messages` threshold
84
+ - Replaces unimplemented PostTaskCompletion hook with simpler, universally-supported approach
85
+ - **Pi Custom Tools for Invar** - Native tool integration without CLI dependency
86
+ - `invar_guard`: Smart verification wrapper (static + doctests + symbolic)
87
+ - `invar_sig`: Show function signatures and contracts
88
+ - `invar_map`: Symbol map with reference counts
89
+ - Auto-installed via `invar init --pi` in `.pi/tools/invar/index.ts`
90
+ - Pi auto-discovers tools, no configuration needed
91
+ - Solves problem of Pi agents not actively using invar tools (falling back to pytest/grep)
92
+
93
+ ### Changed
94
+ - Agent selection prompt now uses checkbox instead of radio buttons
95
+ - Header shows "Claude Code + Pi" when both flags used
96
+ - File selection logic builds from all selected agents' categories
97
+
98
+ ### Documentation
99
+ - Updated README.md with multi-agent examples
100
+ - Added Multi-Agent Support section to CLAUDE.md
101
+ - Updated context.md to reflect DX-81 completion
102
+
10
103
  ## [1.14.0] - 2026-01-03
11
104
 
12
105
  ### Added
@@ -204,7 +297,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
204
297
 
205
298
  ---
206
299
 
207
- [Unreleased]: https://github.com/yourusername/invar/compare/v1.13.0...HEAD
300
+ [Unreleased]: https://github.com/yourusername/invar/compare/v1.15.0...HEAD
301
+ [1.15.0]: https://github.com/yourusername/invar/compare/v1.14.0...v1.15.0
302
+ [1.14.0]: https://github.com/yourusername/invar/compare/v1.13.0...v1.14.0
208
303
  [1.13.0]: https://github.com/yourusername/invar/compare/v1.12.0...v1.13.0
209
304
  [1.12.0]: https://github.com/yourusername/invar/compare/v1.11.0...v1.12.0
210
305
  [1.11.0]: https://github.com/yourusername/invar/compare/v1.10.0...v1.11.0
@@ -102,51 +102,71 @@ src/{project}/
102
102
 
103
103
  ### Calling Methods (Priority Order)
104
104
 
105
- Invar tools can be called in 3 ways. **Try in order:**
106
105
 
107
- 1. **MCP tools** (Claude Code with MCP enabled)
108
- - Direct function calls: `invar_guard()`, `invar_sig()`, etc.
109
- - No Bash wrapper needed
106
+ Invar tools can be called in different ways depending on your agent:
110
107
 
111
- 2. **CLI command** (if `invar` installed in PATH)
108
+ **Claude Code (MCP enabled):**
109
+ 1. **MCP tools** - Direct function calls: `invar_guard()`, `invar_sig()`, etc.
110
+ 2. **CLI command** - Via Bash: `invar guard`, `invar sig`, etc.
111
+
112
+ **Pi Coding Agent:**
113
+ 1. **Custom tools** (auto-installed via `invar init --pi`)
114
+ - Direct tool calls: `invar_guard(changed=true)`, `invar_sig(target="file.py")`, `invar_map(top=10)`
115
+ - Installed in `.pi/tools/invar/index.ts`
116
+ - Pi auto-discovers tools, no configuration needed
117
+ 2. **CLI command** (fallback)
112
118
  - Via Bash: `invar guard`, `invar sig`, etc.
113
- - Install: `pip install invar-tools`
114
119
 
115
- 3. **uvx fallback** (always available, no install needed)
116
- - Via Bash: `uvx invar-tools guard`, `uvx invar-tools sig`, etc.
120
+ **Other agents:**
121
+ - **CLI command** - Via Bash: `invar guard`, `invar sig`, etc.
122
+ - **uvx fallback** - No install needed: `uvx invar-tools guard`
117
123
 
118
124
  ---
119
125
 
120
126
  ### Parameter Reference
121
127
 
128
+
122
129
  **guard** - Verify code quality
123
130
  ```python
124
- # MCP
131
+ # MCP (Claude Code)
125
132
  invar_guard() # Check changed files (default)
126
133
  invar_guard(changed=False) # Check all files
134
+
135
+ # Pi Custom Tool
136
+ invar_guard(changed=true) # Check changed files (default)
137
+ invar_guard(changed=false) # Check all files
138
+ invar_guard(coverage=true) # Collect branch coverage
127
139
  ```
128
140
 
129
141
  **sig** - Show function signatures and contracts
130
142
  ```python
131
- # MCP
143
+ # MCP (Claude Code)
144
+ invar_sig(target="src/foo.py")
145
+
146
+ # Pi Custom Tool
132
147
  invar_sig(target="src/foo.py")
148
+ invar_sig(target="src/foo.py::MyClass")
133
149
  ```
134
150
 
135
151
  **map** - Find entry points
136
152
  ```python
137
- # MCP
153
+ # MCP (Claude Code)
138
154
  invar_map(path=".", top=10)
155
+
156
+ # Pi Custom Tool
157
+ invar_map(path=".", top=10)
158
+ invar_map(top=20) # Show top 20 symbols
139
159
  ```
140
160
 
141
161
  **refs** - Find all references to a symbol
142
162
  ```python
143
- # MCP
163
+ # MCP (Claude Code only - not available as Pi tool yet)
144
164
  invar_refs(target="src/foo.py::MyClass")
145
165
  ```
146
166
 
147
167
  **doc*** - Document tools
148
168
  ```python
149
- # MCP
169
+ # MCP (Claude Code only - not available as Pi tool yet)
150
170
  invar_doc_toc(file="docs/spec.md")
151
171
  invar_doc_read(file="docs/spec.md", section="intro")
152
172
  ```
@@ -363,6 +383,34 @@ pip install -e runtime/ # Runtime in dev mode
363
383
 
364
384
  Run `ruff check --fix` frequently after changing code to fix lint issues before commit.
365
385
 
386
+ ## Multi-Agent Support (DX-81)
387
+
388
+ **Status:** ✅ Implemented (v1.15.0)
389
+
390
+ Invar now supports initializing projects for multiple agents simultaneously:
391
+
392
+ ```bash
393
+ # Single agent (backward compatible)
394
+ invar init --claude
395
+ invar init --pi
396
+
397
+ # Multiple agents (DX-81)
398
+ invar init --claude --pi
399
+
400
+ # Interactive mode with checkbox selection
401
+ invar init # Select multiple agents with Space key
402
+ ```
403
+
404
+ **File Structure:**
405
+ - Shared: CLAUDE.md, .claude/skills/, .invar/
406
+ - Isolated: .claude/hooks/ (Claude Code), .pi/hooks/ (Pi)
407
+ - No conflicts: All files designed for coexistence
408
+
409
+ **Use Cases:**
410
+ - Team collaboration (different members use different agents)
411
+ - Agent switching (have both configured, use either)
412
+ - Open source projects (contributors have agent choice)
413
+
366
414
  ## Session Restore
367
415
 
368
416
  When continuing from a previous session summary:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: invar-tools
3
- Version: 1.14.0
3
+ Version: 1.15.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
@@ -190,8 +190,9 @@ cd your-project
190
190
  uvx invar-tools init
191
191
 
192
192
  # Or quick setup (skip prompts)
193
- uvx invar-tools init --claude # Claude Code
194
- uvx invar-tools init --pi # Pi Coding Agent
193
+ uvx invar-tools init --claude # Claude Code only
194
+ uvx invar-tools init --pi # Pi only
195
+ uvx invar-tools init --claude --pi # Both agents (DX-81)
195
196
  uvx invar-tools init --mcp-only # MCP tools only (legacy projects)
196
197
 
197
198
  # Add runtime contracts to your project
@@ -492,6 +493,7 @@ AlphaCodium · Parsel · Reflexion · Clover
492
493
  |-------|--------|-------|
493
494
  | **Claude Code** | ✅ Full | `invar init --claude` |
494
495
  | **[Pi](https://shittycodingagent.ai/)** | ✅ Full | `invar init --pi` |
496
+ | **Multi-Agent** | ✅ Full | `invar init --claude --pi` (DX-81) |
495
497
  | **Cursor** | ✅ MCP | `invar init` → select Other, add MCP config |
496
498
  | **Other** | 📝 Manual | `invar init` → select Other, include `AGENT.md` in prompt |
497
499
 
@@ -821,6 +823,7 @@ rules = ["missing_contract", "shell_result"]
821
823
  | `invar init` | Initialize or update project (interactive) |
822
824
  | `invar init --claude` | Quick setup for Claude Code |
823
825
  | `invar init --pi` | Quick setup for Pi agent |
826
+ | `invar init --claude --pi` | Setup for both agents (DX-81) |
824
827
  | `invar init --mcp-only` | MCP tools only (no framework files) |
825
828
  | `invar uninstall` | Remove Invar from project (preserves user content) |
826
829
  | `invar sig <file>` | Show signatures and contracts |
@@ -146,8 +146,9 @@ cd your-project
146
146
  uvx invar-tools init
147
147
 
148
148
  # Or quick setup (skip prompts)
149
- uvx invar-tools init --claude # Claude Code
150
- uvx invar-tools init --pi # Pi Coding Agent
149
+ uvx invar-tools init --claude # Claude Code only
150
+ uvx invar-tools init --pi # Pi only
151
+ uvx invar-tools init --claude --pi # Both agents (DX-81)
151
152
  uvx invar-tools init --mcp-only # MCP tools only (legacy projects)
152
153
 
153
154
  # Add runtime contracts to your project
@@ -448,6 +449,7 @@ AlphaCodium · Parsel · Reflexion · Clover
448
449
  |-------|--------|-------|
449
450
  | **Claude Code** | ✅ Full | `invar init --claude` |
450
451
  | **[Pi](https://shittycodingagent.ai/)** | ✅ Full | `invar init --pi` |
452
+ | **Multi-Agent** | ✅ Full | `invar init --claude --pi` (DX-81) |
451
453
  | **Cursor** | ✅ MCP | `invar init` → select Other, add MCP config |
452
454
  | **Other** | 📝 Manual | `invar init` → select Other, include `AGENT.md` in prompt |
453
455
 
@@ -777,6 +779,7 @@ rules = ["missing_contract", "shell_result"]
777
779
  | `invar init` | Initialize or update project (interactive) |
778
780
  | `invar init --claude` | Quick setup for Claude Code |
779
781
  | `invar init --pi` | Quick setup for Pi agent |
782
+ | `invar init --claude --pi` | Setup for both agents (DX-81) |
780
783
  | `invar init --mcp-only` | MCP tools only (no framework files) |
781
784
  | `invar uninstall` | Remove Invar from project (preserves user content) |
782
785
  | `invar sig <file>` | Show signatures and contracts |
@@ -8,6 +8,7 @@ Invar's core value—USBV workflow, contract-driven development, and automated v
8
8
  |-------|--------|-------|
9
9
  | **Claude Code** | ✅ Full | `invar init --claude` |
10
10
  | **Pi** | ✅ Full | `invar init --pi` |
11
+ | **Multi-Agent** | ✅ Full | `invar init --claude --pi` (DX-81) |
11
12
  | **Cursor** | ✅ MCP | `invar init` → select Other, add MCP |
12
13
  | **Other** | 📝 Manual | `invar init` → select Other, include `AGENT.md` in prompt |
13
14
 
@@ -203,14 +204,69 @@ Or if installed in a virtual environment:
203
204
 
204
205
  ---
205
206
 
207
+ ## Multi-Agent Setup (DX-81)
208
+
209
+ **Use multiple agents in the same project**
210
+
211
+ ```bash
212
+ # Setup both Claude Code and Pi
213
+ invar init --claude --pi
214
+
215
+ # Or interactive mode (select multiple with Space key)
216
+ invar init # Choose both "Claude Code" and "Pi Coding Agent"
217
+ ```
218
+
219
+ **What gets installed:**
220
+ - `.claude/hooks/` — Claude Code hooks (4 files)
221
+ - `.pi/hooks/` — Pi hooks (1 file)
222
+ - Shared files: `CLAUDE.md`, `.claude/skills/`, `.invar/`
223
+
224
+ **Use cases:**
225
+ - **Team collaboration** — Different team members use different agents
226
+ - **Agent switching** — Have both configured, use either
227
+ - **Open source** — Contributors can choose their preferred agent
228
+
229
+ **File structure:**
230
+ ```
231
+ project/
232
+ ├── CLAUDE.md # Shared by both agents
233
+ ├── .claude/
234
+ │ ├── skills/ # Shared by both agents
235
+ │ └── hooks/ # Claude Code only
236
+ ├── .pi/
237
+ │ └── hooks/ # Pi only
238
+ └── .mcp.json # Claude Code MCP config
239
+ ```
240
+
241
+ **No conflicts:** All files designed for coexistence. Shared files (CLAUDE.md, skills) work identically for both agents. Isolated files (.claude/hooks/, .pi/hooks/) never interfere.
242
+
243
+ ---
244
+
206
245
  ## Migration Path
207
246
 
247
+ ### Adding a Second Agent
248
+
249
+ Already using Claude Code or Pi? Add the other agent:
250
+
251
+ ```bash
252
+ # Already have Claude Code, add Pi
253
+ invar init --pi
254
+
255
+ # Already have Pi, add Claude Code
256
+ invar init --claude
257
+
258
+ # Or use combined command (safe, no duplicates)
259
+ invar init --claude --pi
260
+ ```
261
+
262
+ All shared files (CLAUDE.md, skills) are safely merged. Only agent-specific hooks are added.
263
+
208
264
  ### From Claude Code to Pi
209
265
 
210
266
  No migration needed! Pi reads the same files:
211
267
  - CLAUDE.md → works in Pi
212
268
  - .claude/skills/ → works in Pi
213
- - Just run `invar init` select Pi to add hooks
269
+ - Just run `invar init --pi` to add Pi hooks
214
270
 
215
271
  ### From Claude Code to Others
216
272
 
@@ -220,7 +276,7 @@ No migration needed! Pi reads the same files:
220
276
 
221
277
  ### From Others to Claude Code
222
278
 
223
- 1. Run `invar init` → select Claude Code
279
+ 1. Run `invar init --claude`
224
280
  2. All features auto-configured (skills, hooks, MCP)
225
281
 
226
282
  ---