invar-tools 1.7.0__tar.gz → 1.7.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.
- {invar_tools-1.7.0 → invar_tools-1.7.1}/.claude/hooks/invar.PostToolUse.sh +1 -1
- {invar_tools-1.7.0 → invar_tools-1.7.1}/.claude/hooks/invar.PreToolUse.sh +1 -1
- {invar_tools-1.7.0 → invar_tools-1.7.1}/.claude/hooks/invar.Stop.sh +1 -1
- {invar_tools-1.7.0 → invar_tools-1.7.1}/.claude/hooks/invar.UserPromptSubmit.sh +2 -1
- {invar_tools-1.7.0 → invar_tools-1.7.1}/PKG-INFO +55 -45
- {invar_tools-1.7.0 → invar_tools-1.7.1}/README.md +53 -44
- {invar_tools-1.7.0 → invar_tools-1.7.1}/docs/agents.md +1 -2
- {invar_tools-1.7.0 → invar_tools-1.7.1}/docs/design.md +5 -4
- {invar_tools-1.7.0 → invar_tools-1.7.1}/docs/guides/multi-agent.md +21 -17
- {invar_tools-1.7.0 → invar_tools-1.7.1}/docs/index.html +8 -9
- invar_tools-1.7.1/docs/proposals/DX-70-init-simplification.md +273 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/docs/proposals/index.md +3 -2
- {invar_tools-1.7.0 → invar_tools-1.7.1}/pyproject.toml +2 -1
- {invar_tools-1.7.0 → invar_tools-1.7.1}/src/invar/core/utils.py +3 -1
- {invar_tools-1.7.0 → invar_tools-1.7.1}/src/invar/shell/claude_hooks.py +90 -0
- invar_tools-1.7.1/src/invar/shell/commands/init.py +410 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/src/invar/shell/commands/uninstall.py +145 -7
- {invar_tools-1.7.0 → invar_tools-1.7.1}/src/invar/shell/contract_coverage.py +4 -1
- {invar_tools-1.7.0 → invar_tools-1.7.1}/src/invar/shell/templates.py +35 -29
- {invar_tools-1.7.0/.claude → invar_tools-1.7.1/src/invar/templates}/commands/audit.md +6 -0
- {invar_tools-1.7.0/.claude → invar_tools-1.7.1/src/invar/templates}/commands/guard.md +6 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/src/invar/templates/config/pre-commit.yaml.jinja +2 -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.7.1}/.aider.conf.yml +0 -0
- {invar_tools-1.7.0/src/invar/templates → invar_tools-1.7.1/.claude}/commands/audit.md +0 -0
- {invar_tools-1.7.0/src/invar/templates → invar_tools-1.7.1/.claude}/commands/guard.md +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/.claude/hooks/PostToolUse.sh +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/.claude/hooks/PreToolUse.sh +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/.claude/hooks/Stop.sh +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/.claude/hooks/UserPromptSubmit.sh +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/.claude/skills/develop/SKILL.md +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/.claude/skills/investigate/SKILL.md +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/.claude/skills/propose/SKILL.md +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/.claude/skills/review/SKILL.md +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/.cursorrules +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/.github/workflows/ci.yml +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/.github/workflows/publish.yml +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/.gitignore +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/.invar/archive/sessions-2025-12.md +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/.invar/context.md +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/.invar/examples/README.md +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/.invar/examples/conftest.py +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/.invar/examples/contracts.py +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/.invar/examples/core_shell.py +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/.invar/examples/functional.py +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/.invar/examples/workflow.md +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/.invar/mcp-setup.md +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/.invar/project-additions.md +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/.invar/proposals/TEMPLATE.md +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/.mcp.json +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/.pre-commit-config.yaml +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/.serena/.gitignore +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/.serena/project.yml +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/CLAUDE.md +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/INVAR.md +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/LICENSE +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/LICENSE-GPL +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/NOTICE +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/docs/.nojekyll +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/docs/diagrams.md +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/docs/guide.md +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/docs/guides/aider.md +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/docs/guides/cline.md +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/docs/guides/continue.md +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/docs/guides/cursor.md +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/docs/history/decisions-2024.md +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/docs/history/feedback/compliance-analysis.md +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/docs/history/feedback/feedback-memo.md +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/docs/history/feedback/index.md +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/docs/history/index.md +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/docs/history/original-vision.md +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/docs/history/protocol-evolution.md +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/docs/history/research/cruxeval-quick-validation.md +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/docs/logo.svg +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/docs/proposals/DX-23-entry-point-detection.md +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/docs/proposals/DX-25-functional-patterns.md +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/docs/proposals/DX-29-pure-content-detection.md +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/docs/proposals/DX-37-coverage-integration.md +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/docs/proposals/DX-38-contract-quality-rules.md +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/docs/proposals/DX-39-workflow-efficiency.md +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/docs/proposals/DX-40-smart-tool-redirect-hook.md +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/docs/proposals/DX-41-automatic-review-orchestration.md +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/docs/proposals/DX-42-workflow-auto-routing.md +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/docs/proposals/DX-43-cross-platform-distribution.md +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/docs/proposals/DX-46-documentation-audit.md +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/docs/proposals/DX-48-code-structure-reorganization.md +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/docs/proposals/DX-49-protocol-distribution-unification.md +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/docs/proposals/DX-50-workflow-enforcement.md +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/docs/proposals/DX-51-workflow-phase-visibility.md +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/docs/proposals/DX-52-venv-dependency-injection.md +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/docs/proposals/DX-53-review-loop-effectiveness.md +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/docs/proposals/DX-54-agent-native-context-management.md +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/docs/proposals/DX-55-claude-init-conflict-resolution.md +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/docs/proposals/DX-56-template-sync-unification.md +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/docs/proposals/DX-60-structured-rules-ssot.md +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/docs/proposals/DX-61-functional-pattern-guidance.md +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/docs/proposals/DX-61-implementation-design.md +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/docs/proposals/DX-62-proactive-reference-reading.md +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/docs/proposals/DX-64-version-display-unification.md +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/docs/proposals/DX-65-single-file-guard.md +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/docs/proposals/DX-66-escape-hatch-visibility.md +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/docs/proposals/DX-67-explicit-skill-invocation.md +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/docs/proposals/DX-68-agent-behavior-optimization.md +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/docs/proposals/DX-69-project-uninstall.md +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/docs/proposals/LX-01-multi-language-feasibility.md +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/docs/proposals/LX-02-agent-portability-analysis.md +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/docs/proposals/LX-04-pi-agent-support.md +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/docs/proposals/completed/2024-12-21-guard-enhancements.md +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/docs/proposals/completed/2024-12-21-language-inspired-enhancements.md +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/docs/proposals/completed/2024-12-21-test-first-enhancement.md +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/docs/proposals/completed/2025-12-21-dx-improvements.md +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/docs/proposals/completed/2025-12-23-dx-20-property-testing-enhancements.md +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/docs/proposals/completed/2025-12-23-dx-21-package-and-init.md +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/docs/proposals/completed/AGENT-IMPROVEMENTS.md +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/docs/proposals/completed/DX-11-documentation-restructure.md +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/docs/proposals/completed/DX-12-hypothesis-fallback.md +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/docs/proposals/completed/DX-13-incremental-prove.md +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/docs/proposals/completed/DX-14-expanded-prove-usage.md +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/docs/proposals/completed/DX-16-agent-tool-enforcement.md +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/docs/proposals/completed/DX-17-workflow-enforcement.md +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/docs/proposals/completed/DX-22-verification-strategy.md +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/docs/proposals/completed/DX-24-mechanism-documentation.md +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/docs/proposals/completed/DX-26-guard-simplification.md +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/docs/proposals/completed/DX-27-system-prompt-protocol.md +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/docs/proposals/completed/DX-28-semantic-verification.md +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/docs/proposals/completed/DX-30-visible-workflow.md +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/docs/proposals/completed/DX-31-adversarial-reviewer.md +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/docs/proposals/completed/DX-32-workflow-iteration.md +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/docs/proposals/completed/DX-33-verification-blind-spots.md +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/docs/proposals/completed/DX-34-review-cycle.md +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/docs/proposals/completed/DX-35-workflow-phase-separation.md +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/docs/proposals/completed/DX-36-documentation-restructuring.md +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/docs/proposals/completed/DX-45-template-consistency.md +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/docs/proposals/completed/DX-47-command-skill-naming.md +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/docs/proposals/completed/DX-57-claude-code-hooks.md +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/docs/proposals/completed/DX-58-document-structure-optimization.md +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/docs/proposals/completed/DX-63-contracts-first-enforcement.md +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/docs/proposals/completed/LX-03-multi-agent-support.md +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/docs/reference/agent-information-hierarchy.md +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/docs/reference/architecture/index.md +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/docs/reference/contracts/advanced.md +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/docs/reference/contracts/completeness.md +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/docs/reference/contracts/doctests.md +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/docs/reference/contracts/index.md +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/docs/reference/contracts/pre-post.md +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/docs/reference/documentation.md +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/docs/reference/index.md +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/docs/reference/proposal-workflow.md +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/docs/reference/rules/index.md +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/docs/reference/rules/severity.md +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/docs/reference/verification/crosshair-vs-hypothesis.md +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/docs/reference/verification/index.md +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/docs/reference/verification/smart-routing.md +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/docs/reference/workflow/index.md +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/docs/reference/workflow/session-start.md +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/docs/reference/workflow/usbv.md +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/docs/terminal-gif-guide.md +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/docs/test-reports/DX-55-test-report.md +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/docs/test-reports/DX-56-test-report.md +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/docs/test-reports/DX-58-test-scenario.md +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/docs/testing/v1.5.0-stress-test.md +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/docs/testing/v1.5.0-test-report.md +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/docs/testing/v1.5.0-workflow-compliance.md +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/docs/vision.md +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/runtime/LICENSE +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/runtime/README.md +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/runtime/pyproject.toml +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/runtime/src/invar_runtime/__init__.py +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/runtime/src/invar_runtime/contracts.py +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/runtime/src/invar_runtime/decorators.py +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/runtime/src/invar_runtime/invariant.py +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/runtime/src/invar_runtime/relations.py +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/runtime/src/invar_runtime/resource.py +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/scripts/smart-guard.sh +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/src/core/__init__.py +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/src/invar/__init__.py +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/src/invar/core/__init__.py +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/src/invar/core/contracts.py +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/src/invar/core/entry_points.py +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/src/invar/core/extraction.py +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/src/invar/core/format_specs.py +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/src/invar/core/format_strategies.py +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/src/invar/core/formatter.py +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/src/invar/core/hypothesis_strategies.py +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/src/invar/core/inspect.py +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/src/invar/core/lambda_helpers.py +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/src/invar/core/models.py +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/src/invar/core/must_use.py +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/src/invar/core/parser.py +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/src/invar/core/patterns/__init__.py +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/src/invar/core/patterns/detector.py +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/src/invar/core/patterns/p0_exhaustive.py +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/src/invar/core/patterns/p0_literal.py +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/src/invar/core/patterns/p0_newtype.py +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/src/invar/core/patterns/p0_nonempty.py +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/src/invar/core/patterns/p0_validation.py +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/src/invar/core/patterns/registry.py +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/src/invar/core/patterns/types.py +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/src/invar/core/postcondition_scope.py +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/src/invar/core/property_gen.py +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/src/invar/core/purity.py +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/src/invar/core/purity_heuristics.py +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/src/invar/core/references.py +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/src/invar/core/review_trigger.py +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/src/invar/core/rule_meta.py +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/src/invar/core/rules.py +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/src/invar/core/shell_analysis.py +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/src/invar/core/shell_architecture.py +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/src/invar/core/strategies.py +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/src/invar/core/suggestions.py +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/src/invar/core/sync_helpers.py +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/src/invar/core/tautology.py +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/src/invar/core/template_parser.py +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/src/invar/core/timeout_inference.py +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/src/invar/core/trivial_detection.py +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/src/invar/core/verification_routing.py +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/src/invar/mcp/__init__.py +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/src/invar/mcp/__main__.py +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/src/invar/mcp/server.py +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/src/invar/py.typed +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/src/invar/shell/__init__.py +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/src/invar/shell/commands/__init__.py +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/src/invar/shell/commands/guard.py +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/src/invar/shell/commands/hooks.py +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/src/invar/shell/commands/merge.py +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/src/invar/shell/commands/mutate.py +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/src/invar/shell/commands/perception.py +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/src/invar/shell/commands/sync_self.py +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/src/invar/shell/commands/template_sync.py +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/src/invar/shell/commands/test.py +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/src/invar/shell/commands/update.py +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/src/invar/shell/config.py +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/src/invar/shell/coverage.py +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/src/invar/shell/fs.py +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/src/invar/shell/git.py +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/src/invar/shell/guard_helpers.py +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/src/invar/shell/guard_output.py +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/src/invar/shell/mcp_config.py +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/src/invar/shell/mutation.py +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/src/invar/shell/pattern_integration.py +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/src/invar/shell/property_tests.py +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/src/invar/shell/prove/__init__.py +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/src/invar/shell/prove/accept.py +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/src/invar/shell/prove/cache.py +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/src/invar/shell/prove/crosshair.py +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/src/invar/shell/prove/hypothesis.py +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/src/invar/shell/subprocess_env.py +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/src/invar/shell/template_engine.py +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/src/invar/shell/testing.py +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/src/invar/templates/CLAUDE.md.template +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/src/invar/templates/__init__.py +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/src/invar/templates/config/CLAUDE.md.jinja +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/src/invar/templates/config/context.md.jinja +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/src/invar/templates/context.md.template +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/src/invar/templates/examples/README.md +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/src/invar/templates/examples/conftest.py +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/src/invar/templates/examples/contracts.py +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/src/invar/templates/examples/core_shell.py +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/src/invar/templates/examples/workflow.md +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/src/invar/templates/hooks/PostToolUse.sh.jinja +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/src/invar/templates/hooks/PreToolUse.sh.jinja +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/src/invar/templates/hooks/Stop.sh.jinja +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/src/invar/templates/hooks/UserPromptSubmit.sh.jinja +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/src/invar/templates/hooks/__init__.py +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/src/invar/templates/manifest.toml +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/src/invar/templates/proposal.md.template +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/src/invar/templates/protocol/INVAR.md +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/src/invar/templates/skills/develop/SKILL.md.jinja +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/src/invar/templates/skills/investigate/SKILL.md.jinja +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/src/invar/templates/skills/propose/SKILL.md.jinja +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/src/invar/templates/skills/review/SKILL.md.jinja +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/src/shell/__init__.py +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/tests/__init__.py +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/tests/conftest.py +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/tests/integration/__init__.py +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/tests/integration/test_cli_flags.py +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/tests/integration/test_dx55_regression.py +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/tests/integration/test_dx56_sync.py +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/tests/test_subprocess_env.py +0 -0
- {invar_tools-1.7.0 → invar_tools-1.7.1}/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)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: invar-tools
|
|
3
|
-
Version: 1.7.
|
|
3
|
+
Version: 1.7.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
|
|
@@ -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,24 @@ 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
|
-
#
|
|
138
|
+
# Interactive mode - choose what to install
|
|
139
|
+
uvx invar-tools init
|
|
140
|
+
|
|
141
|
+
# Or quick setup for Claude Code (skip prompts)
|
|
139
142
|
uvx invar-tools init --claude
|
|
140
143
|
|
|
141
|
-
#
|
|
144
|
+
# Add runtime contracts to your project
|
|
142
145
|
pip install invar-runtime
|
|
143
|
-
# Or add to pyproject.toml: dependencies = ["invar-runtime"]
|
|
144
|
-
|
|
145
|
-
# 4. Start coding with AI
|
|
146
146
|
```
|
|
147
147
|
|
|
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
|
-
```
|
|
148
|
+
**Safe and idempotent** — Run `invar init` anytime. It always **merges** with existing files, preserving your content.
|
|
159
149
|
|
|
160
|
-
|
|
150
|
+
> 💡 **After `claude /init`?** Just run `invar init` again to restore Invar configuration.
|
|
161
151
|
|
|
162
152
|
### 💬 Example Interaction
|
|
163
153
|
|
|
@@ -375,39 +365,57 @@ AlphaCodium · Parsel · Reflexion · Clover
|
|
|
375
365
|
|
|
376
366
|
---
|
|
377
367
|
|
|
378
|
-
## 🖥️
|
|
368
|
+
## 🖥️ Agent Support
|
|
369
|
+
|
|
370
|
+
| Agent | Status | Setup |
|
|
371
|
+
|-------|--------|-------|
|
|
372
|
+
| **Claude Code** | ✅ Full | `invar init` → select Claude Code |
|
|
373
|
+
| **Pi / Cursor** | 🚧 In progress | `invar init` → select Other, include `AGENT.md` in prompt |
|
|
374
|
+
| **Other** | 📝 Manual | `invar init` → select Other, include `AGENT.md` in prompt |
|
|
379
375
|
|
|
380
|
-
|
|
381
|
-
|---------|-------------|---------------|
|
|
382
|
-
| CLI verification (`invar guard`) | ✅ | ✅ |
|
|
383
|
-
| Protocol document (INVAR.md) | ✅ | ✅ |
|
|
384
|
-
| MCP tool integration | ✅ Auto-configured | Manual setup possible |
|
|
385
|
-
| Workflow skills | ✅ Auto-configured | Include in system prompt |
|
|
386
|
-
| Pre-commit hooks | ✅ | ✅ |
|
|
387
|
-
| Sub-agent review | ✅ | — |
|
|
376
|
+
### Claude Code (Full Experience)
|
|
388
377
|
|
|
389
|
-
|
|
378
|
+
All features auto-configured:
|
|
379
|
+
- MCP tools (`invar_guard`, `invar_sig`, `invar_map`)
|
|
380
|
+
- Workflow skills (`/develop`, `/review`, `/investigate`, `/propose`)
|
|
381
|
+
- Claude Code hooks (tool guidance, verification reminders)
|
|
382
|
+
- Pre-commit hooks
|
|
390
383
|
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
384
|
+
### Pi / Cursor (In Progress)
|
|
385
|
+
|
|
386
|
+
Currently available:
|
|
387
|
+
- Protocol document (INVAR.md)
|
|
388
|
+
- CLI verification (`invar guard`)
|
|
389
|
+
- Pre-commit hooks
|
|
390
|
+
- MCP server (manual configuration)
|
|
391
|
+
|
|
392
|
+
### Other Editors (Manual)
|
|
393
|
+
|
|
394
|
+
1. Run `invar init` → select "Other (AGENT.md)"
|
|
395
|
+
2. Include generated `AGENT.md` in your agent's prompt
|
|
396
|
+
3. Configure MCP server if supported
|
|
397
|
+
4. Use CLI commands (`invar guard`) for verification
|
|
395
398
|
|
|
396
399
|
---
|
|
397
400
|
|
|
398
401
|
## 📂 What Gets Installed
|
|
399
402
|
|
|
400
|
-
`invar init
|
|
403
|
+
`invar init` creates (select in interactive mode):
|
|
404
|
+
|
|
405
|
+
| File/Directory | Purpose | Category |
|
|
406
|
+
|----------------|---------|----------|
|
|
407
|
+
| `INVAR.md` | Protocol for AI agents | Required |
|
|
408
|
+
| `.invar/` | Config, context, examples | Required |
|
|
409
|
+
| `.pre-commit-config.yaml` | Verification before commit | Optional |
|
|
410
|
+
| `src/core/`, `src/shell/` | Recommended structure | Optional |
|
|
411
|
+
| `CLAUDE.md` | Agent instructions | Claude Code |
|
|
412
|
+
| `.claude/skills/` | Workflow automation | Claude Code |
|
|
413
|
+
| `.claude/commands/` | User commands (/audit, /guard) | Claude Code |
|
|
414
|
+
| `.claude/hooks/` | Tool guidance | Claude Code |
|
|
415
|
+
| `.mcp.json` | MCP server config | Claude Code |
|
|
416
|
+
| `AGENT.md` | Universal agent instructions | Other agents |
|
|
401
417
|
|
|
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 |
|
|
418
|
+
**Note:** If `pyproject.toml` exists, Guard configuration goes there as `[tool.invar.guard]` instead of `.invar/config.toml`.
|
|
411
419
|
|
|
412
420
|
**Recommended structure:**
|
|
413
421
|
|
|
@@ -473,7 +481,9 @@ rules = ["missing_contract", "shell_result"]
|
|
|
473
481
|
| `invar guard` | Full verification (static + doctest + property + symbolic) |
|
|
474
482
|
| `invar guard --changed` | Only git-modified files |
|
|
475
483
|
| `invar guard --static` | Static analysis only (~0.5s) |
|
|
476
|
-
| `invar init` | Initialize or update project |
|
|
484
|
+
| `invar init` | Initialize or update project (interactive) |
|
|
485
|
+
| `invar init --claude` | Quick setup for Claude Code |
|
|
486
|
+
| `invar uninstall` | Remove Invar from project (preserves user content) |
|
|
477
487
|
| `invar sig <file>` | Show signatures and contracts |
|
|
478
488
|
| `invar map` | Symbol map with reference counts |
|
|
479
489
|
| `invar rules` | List all rules |
|
|
@@ -88,35 +88,24 @@ 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
|
-
#
|
|
96
|
+
# Interactive mode - choose what to install
|
|
97
|
+
uvx invar-tools init
|
|
98
|
+
|
|
99
|
+
# Or quick setup for Claude Code (skip prompts)
|
|
98
100
|
uvx invar-tools init --claude
|
|
99
101
|
|
|
100
|
-
#
|
|
102
|
+
# Add runtime contracts to your project
|
|
101
103
|
pip install invar-runtime
|
|
102
|
-
# Or add to pyproject.toml: dependencies = ["invar-runtime"]
|
|
103
|
-
|
|
104
|
-
# 4. Start coding with AI
|
|
105
104
|
```
|
|
106
105
|
|
|
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
|
-
```
|
|
106
|
+
**Safe and idempotent** — Run `invar init` anytime. It always **merges** with existing files, preserving your content.
|
|
118
107
|
|
|
119
|
-
|
|
108
|
+
> 💡 **After `claude /init`?** Just run `invar init` again to restore Invar configuration.
|
|
120
109
|
|
|
121
110
|
### 💬 Example Interaction
|
|
122
111
|
|
|
@@ -334,39 +323,57 @@ AlphaCodium · Parsel · Reflexion · Clover
|
|
|
334
323
|
|
|
335
324
|
---
|
|
336
325
|
|
|
337
|
-
## 🖥️
|
|
326
|
+
## 🖥️ Agent Support
|
|
327
|
+
|
|
328
|
+
| Agent | Status | Setup |
|
|
329
|
+
|-------|--------|-------|
|
|
330
|
+
| **Claude Code** | ✅ Full | `invar init` → select Claude Code |
|
|
331
|
+
| **Pi / Cursor** | 🚧 In progress | `invar init` → select Other, include `AGENT.md` in prompt |
|
|
332
|
+
| **Other** | 📝 Manual | `invar init` → select Other, include `AGENT.md` in prompt |
|
|
338
333
|
|
|
339
|
-
|
|
340
|
-
|---------|-------------|---------------|
|
|
341
|
-
| CLI verification (`invar guard`) | ✅ | ✅ |
|
|
342
|
-
| Protocol document (INVAR.md) | ✅ | ✅ |
|
|
343
|
-
| MCP tool integration | ✅ Auto-configured | Manual setup possible |
|
|
344
|
-
| Workflow skills | ✅ Auto-configured | Include in system prompt |
|
|
345
|
-
| Pre-commit hooks | ✅ | ✅ |
|
|
346
|
-
| Sub-agent review | ✅ | — |
|
|
334
|
+
### Claude Code (Full Experience)
|
|
347
335
|
|
|
348
|
-
|
|
336
|
+
All features auto-configured:
|
|
337
|
+
- MCP tools (`invar_guard`, `invar_sig`, `invar_map`)
|
|
338
|
+
- Workflow skills (`/develop`, `/review`, `/investigate`, `/propose`)
|
|
339
|
+
- Claude Code hooks (tool guidance, verification reminders)
|
|
340
|
+
- Pre-commit hooks
|
|
349
341
|
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
342
|
+
### Pi / Cursor (In Progress)
|
|
343
|
+
|
|
344
|
+
Currently available:
|
|
345
|
+
- Protocol document (INVAR.md)
|
|
346
|
+
- CLI verification (`invar guard`)
|
|
347
|
+
- Pre-commit hooks
|
|
348
|
+
- MCP server (manual configuration)
|
|
349
|
+
|
|
350
|
+
### Other Editors (Manual)
|
|
351
|
+
|
|
352
|
+
1. Run `invar init` → select "Other (AGENT.md)"
|
|
353
|
+
2. Include generated `AGENT.md` in your agent's prompt
|
|
354
|
+
3. Configure MCP server if supported
|
|
355
|
+
4. Use CLI commands (`invar guard`) for verification
|
|
354
356
|
|
|
355
357
|
---
|
|
356
358
|
|
|
357
359
|
## 📂 What Gets Installed
|
|
358
360
|
|
|
359
|
-
`invar init
|
|
361
|
+
`invar init` creates (select in interactive mode):
|
|
362
|
+
|
|
363
|
+
| File/Directory | Purpose | Category |
|
|
364
|
+
|----------------|---------|----------|
|
|
365
|
+
| `INVAR.md` | Protocol for AI agents | Required |
|
|
366
|
+
| `.invar/` | Config, context, examples | Required |
|
|
367
|
+
| `.pre-commit-config.yaml` | Verification before commit | Optional |
|
|
368
|
+
| `src/core/`, `src/shell/` | Recommended structure | Optional |
|
|
369
|
+
| `CLAUDE.md` | Agent instructions | Claude Code |
|
|
370
|
+
| `.claude/skills/` | Workflow automation | Claude Code |
|
|
371
|
+
| `.claude/commands/` | User commands (/audit, /guard) | Claude Code |
|
|
372
|
+
| `.claude/hooks/` | Tool guidance | Claude Code |
|
|
373
|
+
| `.mcp.json` | MCP server config | Claude Code |
|
|
374
|
+
| `AGENT.md` | Universal agent instructions | Other agents |
|
|
360
375
|
|
|
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 |
|
|
376
|
+
**Note:** If `pyproject.toml` exists, Guard configuration goes there as `[tool.invar.guard]` instead of `.invar/config.toml`.
|
|
370
377
|
|
|
371
378
|
**Recommended structure:**
|
|
372
379
|
|
|
@@ -432,7 +439,9 @@ rules = ["missing_contract", "shell_result"]
|
|
|
432
439
|
| `invar guard` | Full verification (static + doctest + property + symbolic) |
|
|
433
440
|
| `invar guard --changed` | Only git-modified files |
|
|
434
441
|
| `invar guard --static` | Static analysis only (~0.5s) |
|
|
435
|
-
| `invar init` | Initialize or update project |
|
|
442
|
+
| `invar init` | Initialize or update project (interactive) |
|
|
443
|
+
| `invar init --claude` | Quick setup for Claude Code |
|
|
444
|
+
| `invar uninstall` | Remove Invar from project (preserves user content) |
|
|
436
445
|
| `invar sig <file>` | Show signatures and contracts |
|
|
437
446
|
| `invar map` | Symbol map with reference counts |
|
|
438
447
|
| `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
|
---
|
|
@@ -2,15 +2,23 @@
|
|
|
2
2
|
|
|
3
3
|
Invar's core value—USBV workflow, contract-driven development, and automated verification—works with any AI coding agent. This guide covers integration with popular alternatives to Claude Code.
|
|
4
4
|
|
|
5
|
+
## Agent Support Status
|
|
6
|
+
|
|
7
|
+
| Agent | Status | Setup |
|
|
8
|
+
|-------|--------|-------|
|
|
9
|
+
| **Claude Code** | ✅ Full | `invar init` → select Claude Code |
|
|
10
|
+
| **Pi / Cursor** | 🚧 In progress | `invar init` → select Other, include `AGENT.md` in prompt |
|
|
11
|
+
| **Other** | 📝 Manual | `invar init` → select Other, include `AGENT.md` in prompt |
|
|
12
|
+
|
|
5
13
|
## Quick Comparison
|
|
6
14
|
|
|
7
15
|
| Agent | Instruction File | MCP Support | Hooks | Effort |
|
|
8
16
|
|-------|------------------|-------------|-------|--------|
|
|
9
17
|
| [Claude Code](../agents.md) | CLAUDE.md | ✅ Full | ✅ 4 types | Native |
|
|
10
|
-
| [Cline](#cline) | .clinerules | ✅ Full | ❌ |
|
|
11
|
-
| [Cursor](#cursor) | .cursorrules | ✅ Full | ✅ Beta |
|
|
12
|
-
| [Aider](#aider) | CONVENTIONS.md | ⚠️ CLI | ❌ |
|
|
13
|
-
| [Continue](#continue) | config.yaml | ✅ Full | ❌ |
|
|
18
|
+
| [Cline](#cline) | .clinerules | ✅ Full | ❌ | Manual |
|
|
19
|
+
| [Cursor](#cursor) | .cursorrules | ✅ Full | ✅ Beta | Manual |
|
|
20
|
+
| [Aider](#aider) | CONVENTIONS.md | ⚠️ CLI | ❌ | Manual |
|
|
21
|
+
| [Continue](#continue) | config.yaml | ✅ Full | ❌ | Manual |
|
|
14
22
|
|
|
15
23
|
## What Works Everywhere
|
|
16
24
|
|
|
@@ -39,10 +47,8 @@ Invar's core value—USBV workflow, contract-driven development, and automated v
|
|
|
39
47
|
→ [Full Guide: Cline Integration](./cline.md)
|
|
40
48
|
|
|
41
49
|
```bash
|
|
42
|
-
#
|
|
43
|
-
invar init
|
|
44
|
-
|
|
45
|
-
# Or manual setup - create .clinerules in project root
|
|
50
|
+
# Setup
|
|
51
|
+
invar init # Select "Other (AGENT.md)", then copy to .clinerules
|
|
46
52
|
```
|
|
47
53
|
|
|
48
54
|
**Key features:**
|
|
@@ -59,10 +65,8 @@ invar init --agent=cline # Coming soon
|
|
|
59
65
|
→ [Full Guide: Cursor Integration](./cursor.md)
|
|
60
66
|
|
|
61
67
|
```bash
|
|
62
|
-
#
|
|
63
|
-
invar init
|
|
64
|
-
|
|
65
|
-
# Or manual setup - create .cursorrules in project root
|
|
68
|
+
# Setup
|
|
69
|
+
invar init # Select "Other (AGENT.md)", then copy to .cursorrules
|
|
66
70
|
```
|
|
67
71
|
|
|
68
72
|
**Key features:**
|
|
@@ -174,14 +178,14 @@ Or if installed in a virtual environment:
|
|
|
174
178
|
|
|
175
179
|
### From Claude Code to Others
|
|
176
180
|
|
|
177
|
-
1.
|
|
178
|
-
2.
|
|
179
|
-
3.
|
|
181
|
+
1. Run `invar init` → select "Other (AGENT.md)"
|
|
182
|
+
2. Copy AGENT.md content to target instruction file
|
|
183
|
+
3. Configure MCP (if supported)
|
|
180
184
|
|
|
181
185
|
### From Others to Claude Code
|
|
182
186
|
|
|
183
|
-
1. Run `invar init`
|
|
184
|
-
2.
|
|
187
|
+
1. Run `invar init` → select Claude Code
|
|
188
|
+
2. All features auto-configured (skills, hooks, MCP)
|
|
185
189
|
|
|
186
190
|
---
|
|
187
191
|
|
|
@@ -666,26 +666,25 @@
|
|
|
666
666
|
<p class="subtitle">One command to set up your project</p>
|
|
667
667
|
|
|
668
668
|
<div class="install-command">
|
|
669
|
-
<code>cd your-project && uvx invar-tools init
|
|
669
|
+
<code>cd your-project && uvx invar-tools init</code>
|
|
670
670
|
</div>
|
|
671
671
|
|
|
672
672
|
<p class="install-note">
|
|
673
|
-
|
|
674
|
-
Add <code>pip install invar-runtime</code> for runtime contracts.
|
|
673
|
+
Interactive mode — select your agent. Add <code>pip install invar-runtime</code> for runtime contracts.
|
|
675
674
|
</p>
|
|
676
675
|
|
|
677
676
|
<div class="experience-tiers">
|
|
678
677
|
<div class="tier full">
|
|
679
|
-
<h4
|
|
680
|
-
<p>Full
|
|
678
|
+
<h4>✅ Claude Code</h4>
|
|
679
|
+
<p>Full support: Skills, MCP, hooks, sub-agent review</p>
|
|
681
680
|
</div>
|
|
682
681
|
<div class="tier">
|
|
683
|
-
<h4
|
|
684
|
-
<p>
|
|
682
|
+
<h4>🚧 Pi / Cursor</h4>
|
|
683
|
+
<p>In progress: Select Other, include AGENT.md</p>
|
|
685
684
|
</div>
|
|
686
685
|
<div class="tier">
|
|
687
|
-
<h4
|
|
688
|
-
<p>
|
|
686
|
+
<h4>📝 Other</h4>
|
|
687
|
+
<p>Manual: Select Other, include AGENT.md in prompt</p>
|
|
689
688
|
</div>
|
|
690
689
|
</div>
|
|
691
690
|
</div>
|