- Python 3.12+
- uv for package management
git clone https://github.com/intent-engineering-for-coding-agents/cli.git intent-cli
cd intent-cli
uv sync --group devWith uv run, no installation step is needed — the CLI runs directly from the source tree:
uv run iec --version
uv run iec check
uv run iec init --dry-runTo install the tool globally so iec is available without uv run:
uv tool install .
iec --versionTo verify the install resolves correctly:
iec --version # prints version derived from git tag (e.g. 1.0.0)
iec check # runs all checks on the current directoryuv run ruff check . # lint
uv run ruff format --check . # format check
uv run python -m pytest # all tests
uv run iec check # Intent Engineering self-checkAll PRs fall into one of three types. Include the type in the PR title:
| Type | When to use | Example title |
|---|---|---|
[docs] |
Documentation only, no code | [docs] Fix typo in README |
[structural] |
Spec, ADR, design doc — no impl code | [structural] Spec: add foo-check |
[behavior] |
Code changes that alter behaviour | [behavior] Implement foo-check |
See docs/pr-taxonomy.md for the full model and CI gate details.
New checkers follow the OpenSpec four-step workflow: new → plan → apply → archive.
- New: create a change folder under
openspec/changes/<name>/with a proposal. - Plan: fast-forward the proposal into specs, design doc, and tasks.
- Apply: implement the tasks — each must be checkable in
tasks.md. - Archive: merge delta specs into
openspec/specs/, move the change folder toopenspec/changes/archive/<YYYY-MM-DD>-<name>/.
See .agents/instructions/openspec.md for the full workflow and AC ID conventions.
Every checker requires:
- A positive proof test: the check passes when the condition is met.
- A negative proof test: the check fails (or warns) when the condition is violated.
- A
@pytest.mark.<AC_ID>marker linking the test to its spec scenario. - A
@pytest.mark.<test_type>marker (unit,integration,sanity, orbaseline).
See docs/testing-convention.md and tests/scenario-template.md.
- Create
src/iec_cli/checkers/<name>.py. Use an existing checker as a template. - Set
id,description, andmaturity(Maturity.CIorMaturity.ADVISORY) on the class. - Add the module to
src/iec_cli/checkers/__init__.py(import and__all__). - Write tests in
tests/test_<name>_checker.pywith AC markers. - Add the check to docs/checks.md.
Each checker carries a maturity label. See docs/checks.md for the full catalogue.
Maturity.CI— FAIL on violation; hard CI gate.Maturity.ADVISORY— WARN on violation; non-blocking in default CI config.