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