invar-tools 1.14.0__tar.gz → 1.15.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (514) hide show
  1. {invar_tools-1.14.0 → invar_tools-1.15.1}/.invar/context.md +6 -4
  2. invar_tools-1.15.1/.serena/cache/python/document_symbols.pkl +0 -0
  3. invar_tools-1.15.1/.serena/cache/python/raw_document_symbols.pkl +0 -0
  4. invar_tools-1.15.1/CHANGELOG.md +370 -0
  5. {invar_tools-1.14.0 → invar_tools-1.15.1}/CLAUDE.md +61 -13
  6. {invar_tools-1.14.0 → invar_tools-1.15.1}/PKG-INFO +6 -3
  7. {invar_tools-1.14.0 → invar_tools-1.15.1}/README.md +5 -2
  8. {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/guides/multi-agent.md +58 -2
  9. invar_tools-1.15.1/docs/proposals/DX-81-multi-agent-init.md +836 -0
  10. {invar_tools-1.14.0 → invar_tools-1.15.1}/pyproject.toml +1 -1
  11. {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/shell/commands/init.py +71 -41
  12. invar_tools-1.15.1/src/invar/shell/pi_tools.py +127 -0
  13. {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/templates/hooks/UserPromptSubmit.sh.jinja +31 -0
  14. {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/templates/hooks/pi/invar.ts.jinja +35 -1
  15. invar_tools-1.15.1/src/invar/templates/pi-tools/invar/index.ts +596 -0
  16. {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/templates/skills/invar-reflect/CONFIG.md +154 -29
  17. invar_tools-1.15.1/tests/experiments/dx74_attention_drift/scenario_v4/.serena/cache/python/document_symbols.pkl +0 -0
  18. invar_tools-1.15.1/tests/experiments/dx74_attention_drift/scenario_v4/.serena/cache/python/raw_document_symbols.pkl +0 -0
  19. invar_tools-1.15.1/typescript/packages/eslint-plugin/node_modules/.bin/acorn +17 -0
  20. invar_tools-1.15.1/typescript/packages/eslint-plugin/node_modules/.bin/eslint +17 -0
  21. invar_tools-1.15.1/typescript/packages/eslint-plugin/node_modules/.bin/tsc +17 -0
  22. invar_tools-1.15.1/typescript/packages/eslint-plugin/node_modules/.bin/tsserver +17 -0
  23. invar_tools-1.15.1/typescript/packages/fc-runner/node_modules/.bin/tsc +17 -0
  24. invar_tools-1.15.1/typescript/packages/fc-runner/node_modules/.bin/tsserver +17 -0
  25. invar_tools-1.15.1/typescript/packages/quick-check/node_modules/.bin/acorn +17 -0
  26. invar_tools-1.15.1/typescript/packages/quick-check/node_modules/.bin/eslint +17 -0
  27. invar_tools-1.15.1/typescript/packages/quick-check/node_modules/.bin/tsc +17 -0
  28. invar_tools-1.15.1/typescript/packages/quick-check/node_modules/.bin/tsserver +17 -0
  29. invar_tools-1.15.1/typescript/packages/ts-analyzer/node_modules/.bin/tsc +17 -0
  30. invar_tools-1.15.1/typescript/packages/ts-analyzer/node_modules/.bin/tsserver +17 -0
  31. invar_tools-1.14.0/CHANGELOG.md +0 -221
  32. {invar_tools-1.14.0 → invar_tools-1.15.1}/.aider.conf.yml +0 -0
  33. {invar_tools-1.14.0 → invar_tools-1.15.1}/.claude/commands/audit.md +0 -0
  34. {invar_tools-1.14.0 → invar_tools-1.15.1}/.claude/commands/guard.md +0 -0
  35. {invar_tools-1.14.0 → invar_tools-1.15.1}/.claude/hooks/PostToolUse.sh +0 -0
  36. {invar_tools-1.14.0 → invar_tools-1.15.1}/.claude/hooks/PreToolUse.sh +0 -0
  37. {invar_tools-1.14.0 → invar_tools-1.15.1}/.claude/hooks/Stop.sh +0 -0
  38. {invar_tools-1.14.0 → invar_tools-1.15.1}/.claude/hooks/UserPromptSubmit.sh +0 -0
  39. {invar_tools-1.14.0 → invar_tools-1.15.1}/.claude/hooks/invar.PostToolUse.sh +0 -0
  40. {invar_tools-1.14.0 → invar_tools-1.15.1}/.claude/hooks/invar.PreToolUse.sh +0 -0
  41. {invar_tools-1.14.0 → invar_tools-1.15.1}/.claude/hooks/invar.Stop.sh +0 -0
  42. {invar_tools-1.14.0 → invar_tools-1.15.1}/.claude/hooks/invar.UserPromptSubmit.sh +0 -0
  43. {invar_tools-1.14.0 → invar_tools-1.15.1}/.claude/skills/acceptance/SKILL.md +0 -0
  44. {invar_tools-1.14.0 → invar_tools-1.15.1}/.claude/skills/develop/SKILL.md +0 -0
  45. {invar_tools-1.14.0 → invar_tools-1.15.1}/.claude/skills/invar-onboard/SKILL.md +0 -0
  46. {invar_tools-1.14.0 → invar_tools-1.15.1}/.claude/skills/invar-onboard/patterns/python.md +0 -0
  47. {invar_tools-1.14.0 → invar_tools-1.15.1}/.claude/skills/invar-onboard/patterns/typescript.md +0 -0
  48. {invar_tools-1.14.0 → invar_tools-1.15.1}/.claude/skills/invar-onboard/templates/assessment.md.jinja +0 -0
  49. {invar_tools-1.14.0 → invar_tools-1.15.1}/.claude/skills/invar-onboard/templates/roadmap.md.jinja +0 -0
  50. {invar_tools-1.14.0 → invar_tools-1.15.1}/.claude/skills/invar-reflect/CONFIG.md +0 -0
  51. {invar_tools-1.14.0 → invar_tools-1.15.1}/.claude/skills/invar-reflect/SKILL.md +0 -0
  52. {invar_tools-1.14.0 → invar_tools-1.15.1}/.claude/skills/invar-reflect/template.md +0 -0
  53. {invar_tools-1.14.0 → invar_tools-1.15.1}/.claude/skills/investigate/SKILL.md +0 -0
  54. {invar_tools-1.14.0 → invar_tools-1.15.1}/.claude/skills/propose/SKILL.md +0 -0
  55. {invar_tools-1.14.0 → invar_tools-1.15.1}/.claude/skills/review/SKILL.md +0 -0
  56. {invar_tools-1.14.0 → invar_tools-1.15.1}/.claude/skills/security/SKILL.md +0 -0
  57. {invar_tools-1.14.0 → invar_tools-1.15.1}/.claude/skills/security/patterns/_common.yaml +0 -0
  58. {invar_tools-1.14.0 → invar_tools-1.15.1}/.claude/skills/security/patterns/python.yaml +0 -0
  59. {invar_tools-1.14.0 → invar_tools-1.15.1}/.claude/skills/security/patterns/typescript.yaml +0 -0
  60. {invar_tools-1.14.0 → invar_tools-1.15.1}/.cursorrules +0 -0
  61. {invar_tools-1.14.0 → invar_tools-1.15.1}/.github/workflows/ci.yml +0 -0
  62. {invar_tools-1.14.0 → invar_tools-1.15.1}/.github/workflows/publish.yml +0 -0
  63. {invar_tools-1.14.0 → invar_tools-1.15.1}/.gitignore +0 -0
  64. {invar_tools-1.14.0 → invar_tools-1.15.1}/.invar/archive/sessions-2025-12.md +0 -0
  65. {invar_tools-1.14.0 → invar_tools-1.15.1}/.invar/examples/README.md +0 -0
  66. {invar_tools-1.14.0 → invar_tools-1.15.1}/.invar/examples/conftest.py +0 -0
  67. {invar_tools-1.14.0 → invar_tools-1.15.1}/.invar/examples/contracts.py +0 -0
  68. {invar_tools-1.14.0 → invar_tools-1.15.1}/.invar/examples/core_shell.py +0 -0
  69. {invar_tools-1.14.0 → invar_tools-1.15.1}/.invar/examples/functional.py +0 -0
  70. {invar_tools-1.14.0 → invar_tools-1.15.1}/.invar/examples/workflow.md +0 -0
  71. {invar_tools-1.14.0 → invar_tools-1.15.1}/.invar/feedback/feedback-2026-01-03.md +0 -0
  72. {invar_tools-1.14.0 → invar_tools-1.15.1}/.invar/mcp-setup.md +0 -0
  73. {invar_tools-1.14.0 → invar_tools-1.15.1}/.invar/project-additions.md +0 -0
  74. {invar_tools-1.14.0 → invar_tools-1.15.1}/.invar/proposals/TEMPLATE.md +0 -0
  75. {invar_tools-1.14.0 → invar_tools-1.15.1}/.mcp.json +0 -0
  76. {invar_tools-1.14.0 → invar_tools-1.15.1}/.pre-commit-config.yaml +0 -0
  77. {invar_tools-1.14.0 → invar_tools-1.15.1}/.serena/.gitignore +0 -0
  78. {invar_tools-1.14.0 → invar_tools-1.15.1}/.serena/project.yml +0 -0
  79. {invar_tools-1.14.0 → invar_tools-1.15.1}/INVAR.md +0 -0
  80. {invar_tools-1.14.0 → invar_tools-1.15.1}/LICENSE +0 -0
  81. {invar_tools-1.14.0 → invar_tools-1.15.1}/LICENSE-GPL +0 -0
  82. {invar_tools-1.14.0 → invar_tools-1.15.1}/NOTICE +0 -0
  83. {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/.nojekyll +0 -0
  84. {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/agents.md +0 -0
  85. {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/design.md +0 -0
  86. {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/diagrams.md +0 -0
  87. {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/guide.md +0 -0
  88. {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/guides/aider.md +0 -0
  89. {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/guides/cline.md +0 -0
  90. {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/guides/continue.md +0 -0
  91. {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/guides/cursor.md +0 -0
  92. {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/guides/pi.md +0 -0
  93. {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/history/decisions-2024.md +0 -0
  94. {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/history/feedback/compliance-analysis.md +0 -0
  95. {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/history/feedback/feedback-memo.md +0 -0
  96. {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/history/feedback/index.md +0 -0
  97. {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/history/index.md +0 -0
  98. {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/history/original-vision.md +0 -0
  99. {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/history/protocol-evolution.md +0 -0
  100. {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/history/research/cruxeval-quick-validation.md +0 -0
  101. {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/index.html +0 -0
  102. {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/logo.svg +0 -0
  103. {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/proposals/DX-23-entry-point-detection.md +0 -0
  104. {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/proposals/DX-25-functional-patterns.md +0 -0
  105. {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/proposals/DX-29-pure-content-detection.md +0 -0
  106. {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/proposals/DX-38-contract-quality-rules.md +0 -0
  107. {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/proposals/DX-60-structured-rules-ssot.md +0 -0
  108. {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/proposals/DX-61-functional-pattern-guidance.md +0 -0
  109. {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/proposals/DX-61-implementation-design.md +0 -0
  110. {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/proposals/DX-62-proactive-reference-reading.md +0 -0
  111. {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/proposals/DX-68-agent-behavior-optimization.md +0 -0
  112. {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/proposals/DX-74-experiment-report.md +0 -0
  113. {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/proposals/DX-75-attention-aware-framework.md +0 -0
  114. {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/proposals/DX-78-mcp-protocol-sync.md +0 -0
  115. {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/proposals/DX-79-invar-usage-feedback.md +0 -0
  116. {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/proposals/DX-80-guard-cli-mcp-alignment.md +0 -0
  117. {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/proposals/LX-01-multi-language-feasibility.md +0 -0
  118. {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/proposals/LX-04-pi-agent-support.md +0 -0
  119. {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/proposals/LX-07-extension-skills.md +0 -0
  120. {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/proposals/LX-08-extension-skills-future.md +0 -0
  121. {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/proposals/LX-09-legacy-onboarding.md +0 -0
  122. {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/proposals/completed/2024-12-21-guard-enhancements.md +0 -0
  123. {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/proposals/completed/2024-12-21-language-inspired-enhancements.md +0 -0
  124. {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/proposals/completed/2024-12-21-test-first-enhancement.md +0 -0
  125. {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/proposals/completed/2025-12-21-dx-improvements.md +0 -0
  126. {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/proposals/completed/2025-12-23-dx-20-property-testing-enhancements.md +0 -0
  127. {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/proposals/completed/2025-12-23-dx-21-package-and-init.md +0 -0
  128. {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/proposals/completed/AGENT-IMPROVEMENTS.md +0 -0
  129. {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/proposals/completed/DX-11-documentation-restructure.md +0 -0
  130. {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/proposals/completed/DX-12-hypothesis-fallback.md +0 -0
  131. {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/proposals/completed/DX-13-incremental-prove.md +0 -0
  132. {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/proposals/completed/DX-14-expanded-prove-usage.md +0 -0
  133. {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/proposals/completed/DX-16-agent-tool-enforcement.md +0 -0
  134. {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/proposals/completed/DX-17-workflow-enforcement.md +0 -0
  135. {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/proposals/completed/DX-22-verification-strategy.md +0 -0
  136. {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/proposals/completed/DX-24-mechanism-documentation.md +0 -0
  137. {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/proposals/completed/DX-26-guard-simplification.md +0 -0
  138. {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/proposals/completed/DX-27-system-prompt-protocol.md +0 -0
  139. {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/proposals/completed/DX-28-semantic-verification.md +0 -0
  140. {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/proposals/completed/DX-30-visible-workflow.md +0 -0
  141. {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/proposals/completed/DX-31-adversarial-reviewer.md +0 -0
  142. {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/proposals/completed/DX-32-workflow-iteration.md +0 -0
  143. {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/proposals/completed/DX-33-verification-blind-spots.md +0 -0
  144. {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/proposals/completed/DX-34-review-cycle.md +0 -0
  145. {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/proposals/completed/DX-35-workflow-phase-separation.md +0 -0
  146. {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/proposals/completed/DX-36-documentation-restructuring.md +0 -0
  147. {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/proposals/completed/DX-37-coverage-integration.md +0 -0
  148. {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/proposals/completed/DX-39-workflow-efficiency.md +0 -0
  149. {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/proposals/completed/DX-40-smart-tool-redirect-hook.md +0 -0
  150. {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/proposals/completed/DX-41-automatic-review-orchestration.md +0 -0
  151. {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/proposals/completed/DX-42-workflow-auto-routing.md +0 -0
  152. {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/proposals/completed/DX-43-cross-platform-distribution.md +0 -0
  153. {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/proposals/completed/DX-45-template-consistency.md +0 -0
  154. {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/proposals/completed/DX-46-documentation-audit.md +0 -0
  155. {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/proposals/completed/DX-47-command-skill-naming.md +0 -0
  156. {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/proposals/completed/DX-48-code-structure-reorganization.md +0 -0
  157. {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/proposals/completed/DX-49-protocol-distribution-unification.md +0 -0
  158. {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/proposals/completed/DX-50-workflow-enforcement.md +0 -0
  159. {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/proposals/completed/DX-51-workflow-phase-visibility.md +0 -0
  160. {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/proposals/completed/DX-52-venv-dependency-injection.md +0 -0
  161. {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/proposals/completed/DX-53-review-loop-effectiveness.md +0 -0
  162. {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/proposals/completed/DX-54-agent-native-context-management.md +0 -0
  163. {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/proposals/completed/DX-55-claude-init-conflict-resolution.md +0 -0
  164. {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/proposals/completed/DX-56-template-sync-unification.md +0 -0
  165. {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/proposals/completed/DX-57-claude-code-hooks.md +0 -0
  166. {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/proposals/completed/DX-58-document-structure-optimization.md +0 -0
  167. {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/proposals/completed/DX-63-contracts-first-enforcement.md +0 -0
  168. {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/proposals/completed/DX-64-version-display-unification.md +0 -0
  169. {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/proposals/completed/DX-65-single-file-guard.md +0 -0
  170. {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/proposals/completed/DX-66-escape-hatch-visibility.md +0 -0
  171. {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/proposals/completed/DX-67-explicit-skill-invocation.md +0 -0
  172. {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/proposals/completed/DX-69-project-uninstall.md +0 -0
  173. {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/proposals/completed/DX-70-init-simplification.md +0 -0
  174. {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/proposals/completed/DX-70-review-isolation.md +0 -0
  175. {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/proposals/completed/DX-71-skill-command-simplification.md +0 -0
  176. {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/proposals/completed/DX-72-mandatory-self-review-detection.md +0 -0
  177. {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/proposals/completed/DX-74-tiered-attention-defense.md +0 -0
  178. {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/proposals/completed/DX-76-structured-document-query.md +0 -0
  179. {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/proposals/completed/DX-77-mcp-doc-tools-enhancements.md +0 -0
  180. {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/proposals/completed/LX-02-agent-portability-analysis.md +0 -0
  181. {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/proposals/completed/LX-03-multi-agent-support.md +0 -0
  182. {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/proposals/completed/LX-05-language-agnostic-protocol.md +0 -0
  183. {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/proposals/completed/LX-06-appendix-guard-comparison.md +0 -0
  184. {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/proposals/completed/LX-06-typescript-tooling.md +0 -0
  185. {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/proposals/completed/LX-09-legacy-onboarding.md +0 -0
  186. {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/proposals/completed/LX-10-typescript-size-limits.md +0 -0
  187. {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/proposals/index.md +0 -0
  188. {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/reference/agent-information-hierarchy.md +0 -0
  189. {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/reference/architecture/index.md +0 -0
  190. {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/reference/contracts/advanced.md +0 -0
  191. {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/reference/contracts/completeness.md +0 -0
  192. {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/reference/contracts/doctests.md +0 -0
  193. {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/reference/contracts/index.md +0 -0
  194. {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/reference/contracts/pre-post.md +0 -0
  195. {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/reference/documentation.md +0 -0
  196. {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/reference/index.md +0 -0
  197. {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/reference/proposal-workflow.md +0 -0
  198. {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/reference/rules/index.md +0 -0
  199. {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/reference/rules/severity.md +0 -0
  200. {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/reference/verification/crosshair-vs-hypothesis.md +0 -0
  201. {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/reference/verification/index.md +0 -0
  202. {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/reference/verification/smart-routing.md +0 -0
  203. {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/reference/workflow/index.md +0 -0
  204. {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/reference/workflow/session-start.md +0 -0
  205. {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/reference/workflow/usbv.md +0 -0
  206. {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/terminal-gif-guide.md +0 -0
  207. {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/test-reports/DX-55-test-report.md +0 -0
  208. {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/test-reports/DX-56-test-report.md +0 -0
  209. {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/test-reports/DX-58-test-scenario.md +0 -0
  210. {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/testing/v1.5.0-stress-test.md +0 -0
  211. {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/testing/v1.5.0-test-report.md +0 -0
  212. {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/testing/v1.5.0-workflow-compliance.md +0 -0
  213. {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/vision.md +0 -0
  214. {invar_tools-1.14.0 → invar_tools-1.15.1}/runtime/LICENSE +0 -0
  215. {invar_tools-1.14.0 → invar_tools-1.15.1}/runtime/README.md +0 -0
  216. {invar_tools-1.14.0 → invar_tools-1.15.1}/runtime/pyproject.toml +0 -0
  217. {invar_tools-1.14.0 → invar_tools-1.15.1}/runtime/src/invar_runtime/__init__.py +0 -0
  218. {invar_tools-1.14.0 → invar_tools-1.15.1}/runtime/src/invar_runtime/contracts.py +0 -0
  219. {invar_tools-1.14.0 → invar_tools-1.15.1}/runtime/src/invar_runtime/decorators.py +0 -0
  220. {invar_tools-1.14.0 → invar_tools-1.15.1}/runtime/src/invar_runtime/invariant.py +0 -0
  221. {invar_tools-1.14.0 → invar_tools-1.15.1}/runtime/src/invar_runtime/relations.py +0 -0
  222. {invar_tools-1.14.0 → invar_tools-1.15.1}/runtime/src/invar_runtime/resource.py +0 -0
  223. {invar_tools-1.14.0 → invar_tools-1.15.1}/scripts/embed_node_tools.py +0 -0
  224. {invar_tools-1.14.0 → invar_tools-1.15.1}/scripts/smart-guard.sh +0 -0
  225. {invar_tools-1.14.0 → invar_tools-1.15.1}/src/core/__init__.py +0 -0
  226. {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/__init__.py +0 -0
  227. {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/core/__init__.py +0 -0
  228. {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/core/contracts.py +0 -0
  229. {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/core/doc_edit.py +0 -0
  230. {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/core/doc_parser.py +0 -0
  231. {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/core/entry_points.py +0 -0
  232. {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/core/extraction.py +0 -0
  233. {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/core/feedback.py +0 -0
  234. {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/core/format_specs.py +0 -0
  235. {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/core/format_strategies.py +0 -0
  236. {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/core/formatter.py +0 -0
  237. {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/core/hypothesis_strategies.py +0 -0
  238. {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/core/inspect.py +0 -0
  239. {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/core/lambda_helpers.py +0 -0
  240. {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/core/language.py +0 -0
  241. {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/core/models.py +0 -0
  242. {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/core/must_use.py +0 -0
  243. {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/core/parser.py +0 -0
  244. {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/core/patterns/__init__.py +0 -0
  245. {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/core/patterns/detector.py +0 -0
  246. {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/core/patterns/p0_exhaustive.py +0 -0
  247. {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/core/patterns/p0_literal.py +0 -0
  248. {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/core/patterns/p0_newtype.py +0 -0
  249. {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/core/patterns/p0_nonempty.py +0 -0
  250. {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/core/patterns/p0_validation.py +0 -0
  251. {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/core/patterns/registry.py +0 -0
  252. {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/core/patterns/types.py +0 -0
  253. {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/core/postcondition_scope.py +0 -0
  254. {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/core/property_gen.py +0 -0
  255. {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/core/purity.py +0 -0
  256. {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/core/purity_heuristics.py +0 -0
  257. {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/core/references.py +0 -0
  258. {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/core/review_trigger.py +0 -0
  259. {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/core/rule_meta.py +0 -0
  260. {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/core/rules.py +0 -0
  261. {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/core/shell_analysis.py +0 -0
  262. {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/core/shell_architecture.py +0 -0
  263. {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/core/strategies.py +0 -0
  264. {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/core/suggestions.py +0 -0
  265. {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/core/sync_helpers.py +0 -0
  266. {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/core/tautology.py +0 -0
  267. {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/core/template_helpers.py +0 -0
  268. {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/core/template_parser.py +0 -0
  269. {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/core/timeout_inference.py +0 -0
  270. {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/core/trivial_detection.py +0 -0
  271. {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/core/ts_parsers.py +0 -0
  272. {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/core/ts_sig_parser.py +0 -0
  273. {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/core/utils.py +0 -0
  274. {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/core/verification_routing.py +0 -0
  275. {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/mcp/__init__.py +0 -0
  276. {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/mcp/__main__.py +0 -0
  277. {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/mcp/handlers.py +0 -0
  278. {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/mcp/server.py +0 -0
  279. {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/node_tools/MANIFEST +0 -0
  280. {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/node_tools/__init__.py +0 -0
  281. {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/node_tools/fc-runner/cli.js +0 -0
  282. {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/node_tools/quick-check/cli.js +0 -0
  283. {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/node_tools/ts-analyzer/cli.js +0 -0
  284. {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/node_tools/ts-query.js +0 -0
  285. {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/py.typed +0 -0
  286. {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/shell/__init__.py +0 -0
  287. {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/shell/claude_hooks.py +0 -0
  288. {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/shell/commands/__init__.py +0 -0
  289. {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/shell/commands/doc.py +0 -0
  290. {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/shell/commands/feedback.py +0 -0
  291. {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/shell/commands/guard.py +0 -0
  292. {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/shell/commands/hooks.py +0 -0
  293. {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/shell/commands/merge.py +0 -0
  294. {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/shell/commands/mutate.py +0 -0
  295. {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/shell/commands/perception.py +0 -0
  296. {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/shell/commands/skill.py +0 -0
  297. {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/shell/commands/sync_self.py +0 -0
  298. {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/shell/commands/template_sync.py +0 -0
  299. {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/shell/commands/test.py +0 -0
  300. {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/shell/commands/uninstall.py +0 -0
  301. {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/shell/commands/update.py +0 -0
  302. {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/shell/config.py +0 -0
  303. {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/shell/contract_coverage.py +0 -0
  304. {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/shell/coverage.py +0 -0
  305. {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/shell/doc_tools.py +0 -0
  306. {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/shell/fs.py +0 -0
  307. {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/shell/git.py +0 -0
  308. {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/shell/guard_helpers.py +0 -0
  309. {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/shell/guard_output.py +0 -0
  310. {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/shell/mcp_config.py +0 -0
  311. {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/shell/mutation.py +0 -0
  312. {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/shell/pattern_integration.py +0 -0
  313. {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/shell/pi_hooks.py +0 -0
  314. {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/shell/property_tests.py +0 -0
  315. {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/shell/prove/__init__.py +0 -0
  316. {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/shell/prove/accept.py +0 -0
  317. {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/shell/prove/cache.py +0 -0
  318. {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/shell/prove/crosshair.py +0 -0
  319. {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/shell/prove/guard_ts.py +0 -0
  320. {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/shell/prove/hypothesis.py +0 -0
  321. {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/shell/py_refs.py +0 -0
  322. {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/shell/skill_manager.py +0 -0
  323. {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/shell/subprocess_env.py +0 -0
  324. {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/shell/template_engine.py +0 -0
  325. {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/shell/templates.py +0 -0
  326. {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/shell/testing.py +0 -0
  327. {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/shell/ts_compiler.py +0 -0
  328. {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/templates/CLAUDE.md.template +0 -0
  329. {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/templates/__init__.py +0 -0
  330. {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/templates/claude-md/python/critical-rules.md +0 -0
  331. {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/templates/claude-md/python/quick-reference.md +0 -0
  332. {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/templates/claude-md/typescript/critical-rules.md +0 -0
  333. {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/templates/claude-md/typescript/quick-reference.md +0 -0
  334. {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/templates/claude-md/universal/check-in.md +0 -0
  335. {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/templates/claude-md/universal/skills.md +0 -0
  336. {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/templates/claude-md/universal/tool-selection.md +0 -0
  337. {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/templates/claude-md/universal/workflow.md +0 -0
  338. {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/templates/commands/audit.md.jinja +0 -0
  339. {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/templates/commands/guard.md +0 -0
  340. {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/templates/config/AGENT.md.jinja +0 -0
  341. {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/templates/config/CLAUDE.md.jinja +0 -0
  342. {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/templates/config/context.md.jinja +0 -0
  343. {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/templates/config/pre-commit.yaml.jinja +0 -0
  344. {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/templates/context.md.template +0 -0
  345. {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/templates/examples/python/README.md +0 -0
  346. {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/templates/examples/python/conftest.py +0 -0
  347. {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/templates/examples/python/contracts.py +0 -0
  348. {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/templates/examples/python/core_shell.py +0 -0
  349. {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/templates/examples/python/functional.py +0 -0
  350. {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/templates/examples/python/workflow.md +0 -0
  351. {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/templates/examples/typescript/README.md +0 -0
  352. {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/templates/examples/typescript/contracts.ts +0 -0
  353. {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/templates/examples/typescript/core_shell.ts +0 -0
  354. {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/templates/examples/typescript/functional.ts +0 -0
  355. {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/templates/examples/typescript/patterns.md +0 -0
  356. {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/templates/examples/typescript/workflow.md +0 -0
  357. {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/templates/hooks/PostToolUse.sh.jinja +0 -0
  358. {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/templates/hooks/PreToolUse.sh.jinja +0 -0
  359. {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/templates/hooks/Stop.sh.jinja +0 -0
  360. {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/templates/hooks/__init__.py +0 -0
  361. {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/templates/manifest.toml +0 -0
  362. {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/templates/onboard/assessment.md.jinja +0 -0
  363. {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/templates/onboard/patterns/python.md +0 -0
  364. {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/templates/onboard/patterns/typescript.md +0 -0
  365. {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/templates/onboard/roadmap.md.jinja +0 -0
  366. {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/templates/proposal.md.template +0 -0
  367. {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/templates/protocol/INVAR.md.jinja +0 -0
  368. {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/templates/protocol/python/architecture-examples.md +0 -0
  369. {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/templates/protocol/python/contracts-syntax.md +0 -0
  370. {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/templates/protocol/python/markers.md +0 -0
  371. {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/templates/protocol/python/tools.md +0 -0
  372. {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/templates/protocol/python/troubleshooting.md +0 -0
  373. {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/templates/protocol/typescript/architecture-examples.md +0 -0
  374. {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/templates/protocol/typescript/contracts-syntax.md +0 -0
  375. {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/templates/protocol/typescript/markers.md +0 -0
  376. {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/templates/protocol/typescript/tools.md +0 -0
  377. {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/templates/protocol/typescript/troubleshooting.md +0 -0
  378. {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/templates/protocol/universal/architecture.md +0 -0
  379. {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/templates/protocol/universal/completion.md +0 -0
  380. {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/templates/protocol/universal/contracts-concept.md +0 -0
  381. {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/templates/protocol/universal/header.md +0 -0
  382. {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/templates/protocol/universal/session.md +0 -0
  383. {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/templates/protocol/universal/six-laws.md +0 -0
  384. {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/templates/protocol/universal/usbv.md +0 -0
  385. {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/templates/protocol/universal/visible-workflow.md +0 -0
  386. {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/templates/skills/develop/SKILL.md.jinja +0 -0
  387. {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/templates/skills/extensions/_registry.yaml +0 -0
  388. {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/templates/skills/extensions/acceptance/SKILL.md +0 -0
  389. {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/templates/skills/extensions/invar-onboard/SKILL.md +0 -0
  390. {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/templates/skills/extensions/invar-onboard/patterns/python.md +0 -0
  391. {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/templates/skills/extensions/invar-onboard/patterns/typescript.md +0 -0
  392. {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/templates/skills/extensions/invar-onboard/templates/assessment.md.jinja +0 -0
  393. {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/templates/skills/extensions/invar-onboard/templates/roadmap.md.jinja +0 -0
  394. {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/templates/skills/extensions/security/SKILL.md +0 -0
  395. {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/templates/skills/extensions/security/patterns/_common.yaml +0 -0
  396. {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/templates/skills/extensions/security/patterns/python.yaml +0 -0
  397. {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/templates/skills/extensions/security/patterns/typescript.yaml +0 -0
  398. {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/templates/skills/invar-reflect/SKILL.md +0 -0
  399. {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/templates/skills/invar-reflect/template.md +0 -0
  400. {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/templates/skills/investigate/SKILL.md.jinja +0 -0
  401. {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/templates/skills/propose/SKILL.md.jinja +0 -0
  402. {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/templates/skills/review/SKILL.md.jinja +0 -0
  403. {invar_tools-1.14.0 → invar_tools-1.15.1}/src/shell/__init__.py +0 -0
  404. {invar_tools-1.14.0 → invar_tools-1.15.1}/tests/__init__.py +0 -0
  405. {invar_tools-1.14.0 → invar_tools-1.15.1}/tests/conftest.py +0 -0
  406. {invar_tools-1.14.0 → invar_tools-1.15.1}/tests/experiments/conftest.py +0 -0
  407. {invar_tools-1.14.0 → invar_tools-1.15.1}/tests/experiments/dx74_attention_drift/README.md +0 -0
  408. {invar_tools-1.14.0 → invar_tools-1.15.1}/tests/experiments/dx74_attention_drift/RESULTS.md +0 -0
  409. {invar_tools-1.14.0 → invar_tools-1.15.1}/tests/experiments/dx74_attention_drift/RESULTS_V2.md +0 -0
  410. {invar_tools-1.14.0 → invar_tools-1.15.1}/tests/experiments/dx74_attention_drift/RESULTS_V4.md +0 -0
  411. {invar_tools-1.14.0 → invar_tools-1.15.1}/tests/experiments/dx74_attention_drift/ground_truth.yaml +0 -0
  412. {invar_tools-1.14.0 → invar_tools-1.15.1}/tests/experiments/dx74_attention_drift/prompts.yaml +0 -0
  413. {invar_tools-1.14.0 → invar_tools-1.15.1}/tests/experiments/dx74_attention_drift/scenario/api_client.py +0 -0
  414. {invar_tools-1.14.0 → invar_tools-1.15.1}/tests/experiments/dx74_attention_drift/scenario/auth_service.py +0 -0
  415. {invar_tools-1.14.0 → invar_tools-1.15.1}/tests/experiments/dx74_attention_drift/scenario/config_manager.py +0 -0
  416. {invar_tools-1.14.0 → invar_tools-1.15.1}/tests/experiments/dx74_attention_drift/scenario/data_processor.py +0 -0
  417. {invar_tools-1.14.0 → invar_tools-1.15.1}/tests/experiments/dx74_attention_drift/scenario/file_handler.py +0 -0
  418. {invar_tools-1.14.0 → invar_tools-1.15.1}/tests/experiments/dx74_attention_drift/scenario/utils.py +0 -0
  419. {invar_tools-1.14.0 → invar_tools-1.15.1}/tests/experiments/dx74_attention_drift/scenario_v2/analytics_engine.py +0 -0
  420. {invar_tools-1.14.0 → invar_tools-1.15.1}/tests/experiments/dx74_attention_drift/scenario_v2/ground_truth.yaml +0 -0
  421. {invar_tools-1.14.0 → invar_tools-1.15.1}/tests/experiments/dx74_attention_drift/scenario_v2/inventory_manager.py +0 -0
  422. {invar_tools-1.14.0 → invar_tools-1.15.1}/tests/experiments/dx74_attention_drift/scenario_v2/notification_service.py +0 -0
  423. {invar_tools-1.14.0 → invar_tools-1.15.1}/tests/experiments/dx74_attention_drift/scenario_v2/order_processor.py +0 -0
  424. {invar_tools-1.14.0 → invar_tools-1.15.1}/tests/experiments/dx74_attention_drift/scenario_v2/payment_gateway.py +0 -0
  425. {invar_tools-1.14.0 → invar_tools-1.15.1}/tests/experiments/dx74_attention_drift/scenario_v2/user_service.py +0 -0
  426. {invar_tools-1.14.0 → invar_tools-1.15.1}/tests/experiments/dx74_attention_drift/scenario_v3/README.md +0 -0
  427. {invar_tools-1.14.0 → invar_tools-1.15.1}/tests/experiments/dx74_attention_drift/scenario_v3/cache_service.py +0 -0
  428. {invar_tools-1.14.0 → invar_tools-1.15.1}/tests/experiments/dx74_attention_drift/scenario_v3/calculator.py +0 -0
  429. {invar_tools-1.14.0 → invar_tools-1.15.1}/tests/experiments/dx74_attention_drift/scenario_v3/data_processor.py +0 -0
  430. {invar_tools-1.14.0 → invar_tools-1.15.1}/tests/experiments/dx74_attention_drift/scenario_v3/ground_truth.yaml +0 -0
  431. {invar_tools-1.14.0 → invar_tools-1.15.1}/tests/experiments/dx74_attention_drift/scenario_v3/user_manager.py +0 -0
  432. {invar_tools-1.14.0 → invar_tools-1.15.1}/tests/experiments/dx74_attention_drift/scenario_v3/validator.py +0 -0
  433. {invar_tools-1.14.0 → invar_tools-1.15.1}/tests/experiments/dx74_attention_drift/scenario_v4/.serena/.gitignore +0 -0
  434. {invar_tools-1.14.0 → invar_tools-1.15.1}/tests/experiments/dx74_attention_drift/scenario_v4/.serena/project.yml +0 -0
  435. {invar_tools-1.14.0 → invar_tools-1.15.1}/tests/experiments/dx74_attention_drift/scenario_v4/README.md +0 -0
  436. {invar_tools-1.14.0 → invar_tools-1.15.1}/tests/experiments/dx74_attention_drift/scenario_v4/config_manager.py +0 -0
  437. {invar_tools-1.14.0 → invar_tools-1.15.1}/tests/experiments/dx74_attention_drift/scenario_v4/data_service.py +0 -0
  438. {invar_tools-1.14.0 → invar_tools-1.15.1}/tests/experiments/dx74_attention_drift/scenario_v4/ground_truth.yaml +0 -0
  439. {invar_tools-1.14.0 → invar_tools-1.15.1}/tests/experiments/dx74_attention_drift/scenario_v4/math_utils.py +0 -0
  440. {invar_tools-1.14.0 → invar_tools-1.15.1}/tests/experiments/dx74_attention_drift/scenario_v4/report_generator.py +0 -0
  441. {invar_tools-1.14.0 → invar_tools-1.15.1}/tests/experiments/dx74_attention_drift/scenario_v4/user_auth.py +0 -0
  442. {invar_tools-1.14.0 → invar_tools-1.15.1}/tests/experiments/dx74_attention_drift/scenario_v5/api_gateway.py +0 -0
  443. {invar_tools-1.14.0 → invar_tools-1.15.1}/tests/experiments/dx74_attention_drift/scenario_v5/auth_service.py +0 -0
  444. {invar_tools-1.14.0 → invar_tools-1.15.1}/tests/experiments/dx74_attention_drift/scenario_v5/cache_handler.py +0 -0
  445. {invar_tools-1.14.0 → invar_tools-1.15.1}/tests/experiments/dx74_attention_drift/scenario_v5/config_loader.py +0 -0
  446. {invar_tools-1.14.0 → invar_tools-1.15.1}/tests/experiments/dx74_attention_drift/scenario_v5/data_validator.py +0 -0
  447. {invar_tools-1.14.0 → invar_tools-1.15.1}/tests/experiments/dx74_attention_drift/scenario_v5/ground_truth.yaml +0 -0
  448. {invar_tools-1.14.0 → invar_tools-1.15.1}/tests/experiments/dx74_attention_drift/scenario_v5/metrics_collector.py +0 -0
  449. {invar_tools-1.14.0 → invar_tools-1.15.1}/tests/experiments/dx74_attention_drift/scenario_v5/notification_service.py +0 -0
  450. {invar_tools-1.14.0 → invar_tools-1.15.1}/tests/experiments/dx74_attention_drift/scenario_v5/payment_processor.py +0 -0
  451. {invar_tools-1.14.0 → invar_tools-1.15.1}/tests/experiments/dx74_attention_drift/scenario_v5/report_builder.py +0 -0
  452. {invar_tools-1.14.0 → invar_tools-1.15.1}/tests/experiments/dx74_attention_drift/scenario_v5/task_scheduler.py +0 -0
  453. {invar_tools-1.14.0 → invar_tools-1.15.1}/tests/experiments/dx74_attention_drift/scenario_v5/user_manager.py +0 -0
  454. {invar_tools-1.14.0 → invar_tools-1.15.1}/tests/experiments/dx74_attention_drift/scenario_v5/utils.py +0 -0
  455. {invar_tools-1.14.0 → invar_tools-1.15.1}/tests/experiments/dx74_attention_drift/scenario_v6/api_gateway.py +0 -0
  456. {invar_tools-1.14.0 → invar_tools-1.15.1}/tests/experiments/dx74_attention_drift/scenario_v6/auth_service.py +0 -0
  457. {invar_tools-1.14.0 → invar_tools-1.15.1}/tests/experiments/dx74_attention_drift/scenario_v6/cache_handler.py +0 -0
  458. {invar_tools-1.14.0 → invar_tools-1.15.1}/tests/experiments/dx74_attention_drift/scenario_v6/config_loader.py +0 -0
  459. {invar_tools-1.14.0 → invar_tools-1.15.1}/tests/experiments/dx74_attention_drift/scenario_v6/data_validator.py +0 -0
  460. {invar_tools-1.14.0 → invar_tools-1.15.1}/tests/experiments/dx74_attention_drift/scenario_v6/ground_truth.yaml +0 -0
  461. {invar_tools-1.14.0 → invar_tools-1.15.1}/tests/experiments/dx74_attention_drift/scenario_v6/metrics_collector.py +0 -0
  462. {invar_tools-1.14.0 → invar_tools-1.15.1}/tests/experiments/dx74_attention_drift/scenario_v6/notification_service.py +0 -0
  463. {invar_tools-1.14.0 → invar_tools-1.15.1}/tests/experiments/dx74_attention_drift/scenario_v6/payment_processor.py +0 -0
  464. {invar_tools-1.14.0 → invar_tools-1.15.1}/tests/experiments/dx74_attention_drift/scenario_v6/report_builder.py +0 -0
  465. {invar_tools-1.14.0 → invar_tools-1.15.1}/tests/experiments/dx74_attention_drift/scenario_v6/task_scheduler.py +0 -0
  466. {invar_tools-1.14.0 → invar_tools-1.15.1}/tests/experiments/dx74_attention_drift/scenario_v6/user_manager.py +0 -0
  467. {invar_tools-1.14.0 → invar_tools-1.15.1}/tests/experiments/dx74_attention_drift/scenario_v6/utils.py +0 -0
  468. {invar_tools-1.14.0 → invar_tools-1.15.1}/tests/experiments/dx74_attention_drift/scenario_v7/api_service.py +0 -0
  469. {invar_tools-1.14.0 → invar_tools-1.15.1}/tests/experiments/dx74_attention_drift/scenario_v7/auth_manager.py +0 -0
  470. {invar_tools-1.14.0 → invar_tools-1.15.1}/tests/experiments/dx74_attention_drift/scenario_v7/data_processor.py +0 -0
  471. {invar_tools-1.14.0 → invar_tools-1.15.1}/tests/experiments/dx74_attention_drift/scenario_v7/ground_truth.yaml +0 -0
  472. {invar_tools-1.14.0 → invar_tools-1.15.1}/tests/experiments/dx74_attention_drift/scenario_v7/report_engine.py +0 -0
  473. {invar_tools-1.14.0 → invar_tools-1.15.1}/tests/experiments/dx74_attention_drift/scenario_v7/storage_handler.py +0 -0
  474. {invar_tools-1.14.0 → invar_tools-1.15.1}/tests/experiments/dx74_attention_drift/scenario_v7/utils.py +0 -0
  475. {invar_tools-1.14.0 → invar_tools-1.15.1}/tests/integration/__init__.py +0 -0
  476. {invar_tools-1.14.0 → invar_tools-1.15.1}/tests/integration/test_cli_flags.py +0 -0
  477. {invar_tools-1.14.0 → invar_tools-1.15.1}/tests/integration/test_dx55_regression.py +0 -0
  478. {invar_tools-1.14.0 → invar_tools-1.15.1}/tests/integration/test_dx56_sync.py +0 -0
  479. {invar_tools-1.14.0 → invar_tools-1.15.1}/tests/integration/test_dx78_ts_compiler.py +0 -0
  480. {invar_tools-1.14.0 → invar_tools-1.15.1}/tests/integration/test_lx05_detection.py +0 -0
  481. {invar_tools-1.14.0 → invar_tools-1.15.1}/tests/integration/test_lx05_integration.py +0 -0
  482. {invar_tools-1.14.0 → invar_tools-1.15.1}/tests/integration/test_lx05_templates.py +0 -0
  483. {invar_tools-1.14.0 → invar_tools-1.15.1}/tests/integration/test_lx06_typescript.py +0 -0
  484. {invar_tools-1.14.0 → invar_tools-1.15.1}/tests/integration/test_lx07_skills.py +0 -0
  485. {invar_tools-1.14.0 → invar_tools-1.15.1}/tests/integration/test_mcp_doc_tools.py +0 -0
  486. {invar_tools-1.14.0 → invar_tools-1.15.1}/tests/test_subprocess_env.py +0 -0
  487. {invar_tools-1.14.0 → invar_tools-1.15.1}/typescript/.gitignore +0 -0
  488. {invar_tools-1.14.0 → invar_tools-1.15.1}/typescript/README.md +0 -0
  489. {invar_tools-1.14.0 → invar_tools-1.15.1}/typescript/package.json +0 -0
  490. {invar_tools-1.14.0 → invar_tools-1.15.1}/typescript/packages/eslint-plugin/package.json +0 -0
  491. {invar_tools-1.14.0 → invar_tools-1.15.1}/typescript/packages/eslint-plugin/src/index.ts +0 -0
  492. {invar_tools-1.14.0 → invar_tools-1.15.1}/typescript/packages/eslint-plugin/src/rules/no-any-in-schema.ts +0 -0
  493. {invar_tools-1.14.0 → invar_tools-1.15.1}/typescript/packages/eslint-plugin/src/rules/no-io-in-core.ts +0 -0
  494. {invar_tools-1.14.0 → invar_tools-1.15.1}/typescript/packages/eslint-plugin/src/rules/require-jsdoc-example.ts +0 -0
  495. {invar_tools-1.14.0 → invar_tools-1.15.1}/typescript/packages/eslint-plugin/src/rules/require-schema-validation.ts +0 -0
  496. {invar_tools-1.14.0 → invar_tools-1.15.1}/typescript/packages/eslint-plugin/src/rules/shell-result-type.ts +0 -0
  497. {invar_tools-1.14.0 → invar_tools-1.15.1}/typescript/packages/eslint-plugin/tsconfig.json +0 -0
  498. {invar_tools-1.14.0 → invar_tools-1.15.1}/typescript/packages/fc-runner/package.json +0 -0
  499. {invar_tools-1.14.0 → invar_tools-1.15.1}/typescript/packages/fc-runner/src/cli.ts +0 -0
  500. {invar_tools-1.14.0 → invar_tools-1.15.1}/typescript/packages/fc-runner/src/index.ts +0 -0
  501. {invar_tools-1.14.0 → invar_tools-1.15.1}/typescript/packages/fc-runner/tsconfig.json +0 -0
  502. {invar_tools-1.14.0 → invar_tools-1.15.1}/typescript/packages/quick-check/package.json +0 -0
  503. {invar_tools-1.14.0 → invar_tools-1.15.1}/typescript/packages/quick-check/src/cli.ts +0 -0
  504. {invar_tools-1.14.0 → invar_tools-1.15.1}/typescript/packages/quick-check/src/index.ts +0 -0
  505. {invar_tools-1.14.0 → invar_tools-1.15.1}/typescript/packages/quick-check/tsconfig.json +0 -0
  506. {invar_tools-1.14.0 → invar_tools-1.15.1}/typescript/packages/ts-analyzer/package.json +0 -0
  507. {invar_tools-1.14.0 → invar_tools-1.15.1}/typescript/packages/ts-analyzer/src/cli.ts +0 -0
  508. {invar_tools-1.14.0 → invar_tools-1.15.1}/typescript/packages/ts-analyzer/src/index.ts +0 -0
  509. {invar_tools-1.14.0 → invar_tools-1.15.1}/typescript/packages/ts-analyzer/tsconfig.json +0 -0
  510. {invar_tools-1.14.0 → invar_tools-1.15.1}/typescript/pnpm-workspace.yaml +0 -0
  511. {invar_tools-1.14.0 → invar_tools-1.15.1}/typescript/scripts/bundle.mjs +0 -0
  512. {invar_tools-1.14.0 → invar_tools-1.15.1}/typescript/tsconfig.base.json +0 -0
  513. {invar_tools-1.14.0 → invar_tools-1.15.1}/typescript/vitest.config.ts +0 -0
  514. {invar_tools-1.14.0 → invar_tools-1.15.1}/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) |
@@ -0,0 +1,370 @@
1
+ # Changelog
2
+
3
+ All notable changes to Invar will be documented in this file.
4
+
5
+ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
+ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
+
8
+ ## [Unreleased]
9
+
10
+
11
+
12
+ ## [1.15.1] - 2026-01-03
13
+
14
+ ### Added
15
+ - **Pi Custom Tools: Document Tools** - Added 6 doc tools for structured markdown editing
16
+ - `invar_doc_toc`: Extract document structure (Table of Contents)
17
+ - `invar_doc_read`: Read specific section from a document
18
+ - `invar_doc_find`: Find sections matching a pattern
19
+ - `invar_doc_replace`: Replace section content
20
+ - `invar_doc_insert`: Insert content relative to a section
21
+ - `invar_doc_delete`: Delete a section
22
+ - All tools follow the same security patterns as core tools (path validation, temp file handling)
23
+ - Brings Pi custom tools to parity with MCP server capabilities (9 tools total)
24
+
25
+ ### Fixed
26
+ - **Pi Custom Tools: uvx Fallback Support** - Automatic fallback to `uvx invar-tools`
27
+ - Added `resolveInvarCommand()` helper to replace `checkInvarInstalled()`
28
+ - Try `invar` command first (if installed in PATH)
29
+ - Fallback to `uvx invar-tools` if `invar` not found
30
+ - No installation required - uvx downloads and runs invar-tools on-demand
31
+ - Matches the 3-tier calling method documented in CLAUDE.md
32
+ - All 9 tools updated to use the command resolver
33
+
34
+ ### Added
35
+ - **Pi Custom Tools: Document Tools** - Added 6 doc tools for structured markdown editing
36
+ - `invar_doc_toc`: Extract document structure (Table of Contents)
37
+ - `invar_doc_read`: Read specific section from a document
38
+ - `invar_doc_find`: Find sections matching a pattern
39
+ - `invar_doc_replace`: Replace section content
40
+ - `invar_doc_insert`: Insert content relative to a section
41
+ - `invar_doc_delete`: Delete a section
42
+ - All tools follow the same security patterns as core tools (path validation, temp file handling)
43
+ - Brings Pi custom tools to parity with MCP server capabilities
44
+
45
+ ### Changed
46
+ - **Pi Custom Tools: uvx Fallback Support** - Automatic fallback to `uvx invar-tools`
47
+ - Try `invar` command first (if installed in PATH)
48
+ - Fallback to `uvx invar-tools` if `invar` not found
49
+ - No installation required - uvx downloads and runs invar-tools on-demand
50
+ - Matches the 3-tier calling method documented in CLAUDE.md
51
+
52
+ ### Added
53
+ - **Pi Custom Tools: Document Tools** - Added 6 doc tools for structured markdown editing
54
+ - `invar_doc_toc`: Extract document structure (Table of Contents)
55
+ - `invar_doc_read`: Read specific section from a document
56
+ - `invar_doc_find`: Find sections matching a pattern
57
+ - `invar_doc_replace`: Replace section content
58
+ - `invar_doc_insert`: Insert content relative to a section
59
+ - `invar_doc_delete`: Delete a section
60
+ - All tools follow the same security patterns as core tools (path validation, temp file handling)
61
+ - Brings Pi custom tools to parity with MCP server capabilities
62
+
63
+ ## [1.15.0] - 2026-01-03
64
+
65
+ ### Added
66
+ - **DX-81: Multi-Agent Init Support** - Complete implementation
67
+ - Remove mutual exclusivity between `--claude` and `--pi` flags
68
+ - Support combined flags: `invar init --claude --pi`
69
+ - Install both `.claude/hooks/` and `.pi/hooks/` simultaneously
70
+ - **Interactive mode enhancement**:
71
+ - Changed from single-select to checkbox multi-select
72
+ - Allow selecting multiple agents with Space key
73
+ - Claude Code pre-checked as default
74
+ - **Backward compatibility maintained**:
75
+ - `invar init --claude` works as before (Claude only)
76
+ - `invar init --pi` works as before (Pi only)
77
+ - Sequential init (`--claude` then `--pi`) still works
78
+ - **Use cases enabled**:
79
+ - Team collaboration (different members use different agents)
80
+ - Agent switching (both configured, use either)
81
+ - Open source projects (contributors have agent choice)
82
+ - **DX-79: Message Count Auto-Trigger for /invar-reflect** - Cross-platform feedback automation
83
+ - Automatic feedback reminder at configurable message threshold (default: 30)
84
+ - **Claude Code implementation**: UserPromptSubmit hook with jq config parsing
85
+ - **Pi implementation**: TypeScript hook with fs config reading
86
+ - **Shared configuration**: Both read `.claude/settings.local.json` feedback section
87
+ - **User control**: Disable via `feedback.enabled=false` or adjust `min_messages` threshold
88
+ - Replaces unimplemented PostTaskCompletion hook with simpler, universally-supported approach
89
+ - **Pi Custom Tools for Invar** - Native tool integration without CLI dependency
90
+ - `invar_guard`: Smart verification wrapper (static + doctests + symbolic)
91
+ - `invar_sig`: Show function signatures and contracts
92
+ - `invar_map`: Symbol map with reference counts
93
+ - Auto-installed via `invar init --pi` in `.pi/tools/invar/index.ts`
94
+ - Pi auto-discovers tools, no configuration needed
95
+ - Solves problem of Pi agents not actively using invar tools (falling back to pytest/grep)
96
+
97
+ ### Changed
98
+ - Agent selection prompt now uses checkbox instead of radio buttons
99
+ - Header shows "Claude Code + Pi" when both flags used
100
+ - File selection logic builds from all selected agents' categories
101
+
102
+ ### Fixed
103
+ - **Security hardening in Pi templates** (3-round adversarial review)
104
+ - Path injection defense with comprehensive shell metacharacter blocking
105
+ - TOCTOU race condition eliminated in config reading
106
+ - Runtime type validation for external inputs
107
+ - ES module consistency (no CommonJS mixing)
108
+
109
+ ### Documentation
110
+ - Updated README.md with multi-agent examples
111
+ - Added Multi-Agent Support section to CLAUDE.md
112
+ - Updated context.md to reflect DX-81 completion
113
+
114
+ ### Added
115
+ - **DX-81: Multi-Agent Init Support** - Complete implementation
116
+ - Remove mutual exclusivity between `--claude` and `--pi` flags
117
+ - Support combined flags: `invar init --claude --pi`
118
+ - Install both `.claude/hooks/` and `.pi/hooks/` simultaneously
119
+ - **Interactive mode enhancement**:
120
+ - Changed from single-select to checkbox multi-select
121
+ - Allow selecting multiple agents with Space key
122
+ - Claude Code pre-checked as default
123
+ - **Backward compatibility maintained**:
124
+ - `invar init --claude` works as before (Claude only)
125
+ - `invar init --pi` works as before (Pi only)
126
+ - Sequential init (`--claude` then `--pi`) still works
127
+ - **Use cases enabled**:
128
+ - Team collaboration (different members use different agents)
129
+ - Agent switching (both configured, use either)
130
+ - Open source projects (contributors have agent choice)
131
+ - **DX-79: Message Count Auto-Trigger for /invar-reflect** - Cross-platform feedback automation
132
+ - Automatic feedback reminder at configurable message threshold (default: 30)
133
+ - **Claude Code implementation**: UserPromptSubmit hook with jq config parsing
134
+ - **Pi implementation**: TypeScript hook with fs config reading
135
+ - **Shared configuration**: Both read `.claude/settings.local.json` feedback section
136
+ - **User control**: Disable via `feedback.enabled=false` or adjust `min_messages` threshold
137
+ - Replaces unimplemented PostTaskCompletion hook with simpler, universally-supported approach
138
+ - **Pi Custom Tools for Invar** - Native tool integration without CLI dependency
139
+ - `invar_guard`: Smart verification wrapper (static + doctests + symbolic)
140
+ - `invar_sig`: Show function signatures and contracts
141
+ - `invar_map`: Symbol map with reference counts
142
+ - Auto-installed via `invar init --pi` in `.pi/tools/invar/index.ts`
143
+ - Pi auto-discovers tools, no configuration needed
144
+ - Solves problem of Pi agents not actively using invar tools (falling back to pytest/grep)
145
+
146
+ ### Changed
147
+ - Agent selection prompt now uses checkbox instead of radio buttons
148
+ - Header shows "Claude Code + Pi" when both flags used
149
+ - File selection logic builds from all selected agents' categories
150
+
151
+ ### Documentation
152
+ - Updated README.md with multi-agent examples
153
+ - Added Multi-Agent Support section to CLAUDE.md
154
+ - Updated context.md to reflect DX-81 completion
155
+
156
+ ## [1.14.0] - 2026-01-03
157
+
158
+ ### Added
159
+ - **DX-79: Invar Usage Feedback Collection** - Complete implementation of automatic feedback generation system
160
+ - `/invar-reflect` skill: Generate structured feedback on Invar tool usage
161
+ - Analyzes tool usage patterns and pain points
162
+ - Tracks learning curves and confusion points
163
+ - Produces detailed markdown reports in `.invar/feedback/`
164
+ - **CLI tools** for feedback management:
165
+ - `invar feedback list` - Display all feedback files with timestamps
166
+ - `invar feedback cleanup` - Remove old feedback files (default: >90 days)
167
+ - `invar feedback anonymize` - Strip sensitive data for safe sharing
168
+ - **Core anonymization logic** (`src/invar/core/feedback.py`):
169
+ - Removes 8 types of sensitive data (emails, IPs, paths, tokens, etc.)
170
+ - Contract-verified with `@pre`/`@post` and doctests
171
+ - CrossHair symbolic verification passed
172
+ - **Init integration**:
173
+ - Automatic feedback configuration in `.claude/settings.local.json`
174
+ - Interactive consent prompt (opt-out design, default: enabled)
175
+ - Visible notifications in quick modes (`--claude`, `--pi`)
176
+ - **Template integration**: New projects get `/invar-reflect` skill out-of-box
177
+ - Added to `manifest.toml` with 3 files (SKILL.md, template.md, CONFIG.md)
178
+ - Installed automatically via `invar init --claude`
179
+
180
+ ### Fixed
181
+ - **Round 2 review fixes**:
182
+ - Moved anonymization logic from Shell to Core (proper separation)
183
+ - Removed redundant type contracts (guard warning resolved)
184
+ - Fixed Pi notification path mismatch
185
+ - Expanded anonymization patterns (comprehensive coverage)
186
+
187
+ ### Security
188
+ - Privacy-first design: All feedback stored locally, never sent automatically
189
+ - Comprehensive anonymization for safe sharing with maintainers
190
+ - User controls what (if anything) to share
191
+
192
+ ## [1.13.0] - 2026-01-03
193
+
194
+ ### Fixed
195
+ - **guard CLI默认行为对齐MCP**: CLI和MCP默认都检查修改文件
196
+ - 修复设计遗留问题:CLI应该和MCP行为一致(agent-first原则)
197
+ - 之前:`invar guard` 检查全部文件(慢)
198
+ - 现在:`invar guard` 检查修改文件(快,和MCP一致)
199
+
200
+ ### Added
201
+ - **新增`--all`标志**: 显式请求全检查
202
+ - `invar guard --all` - 检查整个项目(CI、release场景)
203
+ - 向后兼容:`invar guard --changed` 仍然有效
204
+ - **Tool Selection文档章节**: 解决Pi等不支持MCP的agent调用问题
205
+ - 三种等价调用方式对照表(MCP / CLI / uvx)
206
+ - 参数映射说明
207
+ - 快速示例
208
+
209
+ ### Migration
210
+ - **Agent用户(主要)**: 自动获得更快体验,无需改动
211
+ - **CI脚本(极少)**: 如需全检查,改为 `invar guard --all`
212
+ - **Pre-commit hooks**: 不受影响(已经用--changed)
213
+
214
+ ## [1.12.0] - 2026-01-03
215
+
216
+ ### Added
217
+ - **DX-78: TypeScript Compiler API Integration**
218
+ - Full TypeScript semantic analysis via Compiler API
219
+ - `invar refs` command for finding symbol references across Python and TypeScript
220
+ - Security fixes for TypeScript code analysis
221
+ - Comprehensive MCP handlers for TypeScript tools
222
+
223
+ ### Fixed
224
+ - Skill frontmatter missing in skill definitions
225
+
226
+ ## [1.11.0] - 2025-12
227
+
228
+ ### Added
229
+ - **DX-77: MCP Document Tools Enhancements**
230
+ - Phase A: Batch section reading with `invar_doc_read_many`
231
+ - Unicode-aware fuzzy matching for section search
232
+ - Explicit tool substitution hints
233
+
234
+ ### Changed
235
+ - Documentation improvements for MCP server configuration
236
+
237
+ ## [1.10.0] - 2025-12
238
+
239
+ ### Added
240
+ - **DX-75: Lightweight Review Strategy**
241
+ - Scope-based review strategies (THOROUGH, HYBRID, CHUNKED)
242
+ - Isolation requirements for non-trivial implementations
243
+
244
+ ### Changed
245
+ - Review skill now spawns isolated subagents based on scope
246
+
247
+ ## [1.9.0] - 2025-12
248
+
249
+ ### Added
250
+ - **DX-63: Contracts-First Enforcement**
251
+ - `--contracts-only` flag for contract coverage checking
252
+ - Function-level gates in BUILD phase
253
+ - Incremental development patterns
254
+
255
+ ### Changed
256
+ - USBV workflow now enforces contracts before implementation
257
+
258
+ ## [1.8.0] - 2025-12
259
+
260
+ ### Added
261
+ - **DX-54: Context Management**
262
+ - Context refresh requirements at workflow entry points
263
+ - Task Router in `.invar/context.md`
264
+
265
+ ### Changed
266
+ - Workflow skills now read context on entry
267
+
268
+ ## [1.7.0] - 2025-12
269
+
270
+ ### Added
271
+ - **DX-51: Workflow Phase Visibility**
272
+ - Visual phase headers for USBV transitions
273
+ - Three-layer visibility (Skill, Phase, Tasks)
274
+
275
+ ### Changed
276
+ - Phase transitions now display clear visual separators
277
+
278
+ ## [1.6.0] - 2025-12
279
+
280
+ ### Added
281
+ - **DX-42: Workflow Auto-Routing**
282
+ - Automatic skill selection based on trigger words
283
+ - User redirect capability with natural language
284
+ - Simple task optimization
285
+
286
+ ### Changed
287
+ - Skills now announce routing decisions before execution
288
+
289
+ ## [1.5.0] - 2025-12
290
+
291
+ ### Added
292
+ - **DX-41: Automatic Review Orchestration**
293
+ - Guard triggers `review_suggested` for security-sensitive changes
294
+ - Auto-entry to /review skill
295
+
296
+ ### Changed
297
+ - Review is now automatically invoked after development when appropriate
298
+
299
+ ## [1.4.0] - 2025-12
300
+
301
+ ### Added
302
+ - **DX-37: Coverage Integration**
303
+ - `--coverage` flag for branch coverage collection
304
+ - Integration with pytest-cov
305
+
306
+ ### Changed
307
+ - Guard can now collect and report branch coverage
308
+
309
+ ## [1.3.0] - 2025-12
310
+
311
+ ### Added
312
+ - **DX-30: Visible Workflow**
313
+ - TodoList checkpoints for complex tasks (UNDERSTAND, SPECIFY, VALIDATE)
314
+ - Contracts shown before code in SPECIFY phase
315
+
316
+ ### Changed
317
+ - BUILD phase is now internal work (not shown in TodoList)
318
+
319
+ ## [1.2.0] - 2025-12
320
+
321
+ ### Added
322
+ - **DX-26: Guard Simplification**
323
+ - Agent mode auto-detection (TTY vs non-TTY)
324
+ - JSON output for non-TTY environments
325
+
326
+ ### Changed
327
+ - Guard now automatically outputs JSON when piped
328
+
329
+ ## [1.1.0] - 2025-12
330
+
331
+ ### Added
332
+ - **DX-21: Package and Init**
333
+ - `invar init` command for project initialization
334
+ - Template-based CLAUDE.md and INVAR.md generation
335
+
336
+ ### Changed
337
+ - Initial project setup now streamlined with `invar init`
338
+
339
+ ## [1.0.0] - 2025-12
340
+
341
+ ### Added
342
+ - Initial release of Invar
343
+ - Core/Shell architecture
344
+ - Contract-based verification (@pre/@post)
345
+ - USBV workflow (Understand → Specify → Build → Validate)
346
+ - Smart Guard (static + doctests + CrossHair + Hypothesis)
347
+ - MCP server for Claude Code integration
348
+ - CLI tools (guard, sig, map, rules)
349
+ - Multi-agent support (Claude Code, Aider, Pi)
350
+
351
+ ---
352
+
353
+ [Unreleased]: https://github.com/yourusername/invar/compare/v1.15.1...HEAD
354
+ [1.15.1]: https://github.com/yourusername/invar/compare/v1.15.0...v1.15.1
355
+ [1.15.0]: https://github.com/yourusername/invar/compare/v1.14.0...v1.15.0
356
+ [1.14.0]: https://github.com/yourusername/invar/compare/v1.13.0...v1.14.0
357
+ [1.13.0]: https://github.com/yourusername/invar/compare/v1.12.0...v1.13.0
358
+ [1.12.0]: https://github.com/yourusername/invar/compare/v1.11.0...v1.12.0
359
+ [1.11.0]: https://github.com/yourusername/invar/compare/v1.10.0...v1.11.0
360
+ [1.10.0]: https://github.com/yourusername/invar/compare/v1.9.0...v1.10.0
361
+ [1.9.0]: https://github.com/yourusername/invar/compare/v1.8.0...v1.9.0
362
+ [1.8.0]: https://github.com/yourusername/invar/compare/v1.7.0...v1.8.0
363
+ [1.7.0]: https://github.com/yourusername/invar/compare/v1.6.0...v1.7.0
364
+ [1.6.0]: https://github.com/yourusername/invar/compare/v1.5.0...v1.6.0
365
+ [1.5.0]: https://github.com/yourusername/invar/compare/v1.4.0...v1.5.0
366
+ [1.4.0]: https://github.com/yourusername/invar/compare/v1.3.0...v1.4.0
367
+ [1.3.0]: https://github.com/yourusername/invar/compare/v1.2.0...v1.3.0
368
+ [1.2.0]: https://github.com/yourusername/invar/compare/v1.1.0...v1.2.0
369
+ [1.1.0]: https://github.com/yourusername/invar/compare/v1.0.0...v1.1.0
370
+ [1.0.0]: https://github.com/yourusername/invar/releases/tag/v1.0.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.1
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
  ---