How andrejksi/emi works
EMI is a deterministic verification tool invoked when a coding agent says it is done. Its principal workflow compares baseline and candidate evidence, measures applicable checks, applies a fixed decision table, and returns an actionable receipt; hooks can invoke that workflow at an agent stop. The README documents the major verification capabilities and supported languages. Source excerpts are partial, so some stage-to-stage links are documented rather than confirmed from implementation; unsampled integrations are not expanded.
Main entry points: run.rs Done check · src/lib.rs Sandbox executor · src/lib.rs Driver interface · main.rs EMI commands
Components 23
CLI and hooks
- EMI commands
crates/emi-cli/src/main.rs - Project setup
crates/emi-cli/src/setup.rs - Harness adapters
crates/emi-hook/src/claude.rs - Stop decisions
crates/emi-hook/src/decision.rs
Check orchestration
- Done check
crates/emi-done/src/run.rs - Check configuration
crates/emi-done/src/config.rs - Baseline snapshot
crates/emi-done/src/baseline.rs - Candidate changes
crates/emi-done/src/candidate.rs - Changed old tests
crates/emi-done/src/oldtests.rs - Check state
crates/emi-done/src/state.rs
Verification stages
- Regression checks
crates/emi-done/src/regression.rs - Law checks
crates/emi-done/src/laws.rs - Change proving
crates/emi-python/src/proving.rs - Behavior comparison
crates/emi-done/src/preserve.rs - Mutation adequacy
crates/emi-done/src/adequacy.rs - Receipt and action
crates/emi-done/src/receipt.rs
Language drivers
- Driver interface
crates/emi-driver/src/lib.rs - Python checks
crates/emi-python/src/lib.rs - Rust checks
crates/emi-rust/src/lib.rs - TypeScript checks
crates/emi-typescript/src/lib.rs
Execution and decisions
- Sandbox executor
crates/emi-exec/src/lib.rs - Fixed decision table
crates/emi-kernel/src/decide.rs
Other components
- Engineer or agent
Connections 29
- Engineer or agent → EMI commands: runs commands
README.md - EMI commands → Project setup: starts setup
crates/emi-cli/src/main.rs - EMI commands → Done check: starts check
crates/emi-cli/src/main.rs - Engineer or agent → Harness adapters: signals done
README.md - Harness adapters → Stop decisions: translate events
crates/emi-hook/src/claude.rs - Stop decisions → Done check: invokes check
README.md - Done check → Check configuration: reads settings
crates/emi-done/src/lib.rs - Done check → Baseline snapshot: resolves baseline
crates/emi-done/src/lib.rs - Done check → Candidate changes: freezes candidate
- Done check → Changed old tests: finds changed tests
crates/emi-done/src/lib.rs - Done check → Regression checks: measures regressions
crates/emi-done/src/lib.rs - Done check → Law checks: runs laws
README.md - Done check → Change proving: measures new tests
README.md - Done check → Behavior comparison: compares behavior
README.md - Done check → Mutation adequacy: plants mutants
README.md - Done check → Driver interface: uses language interface
crates/emi-driver/src/lib.rs - Driver interface → Python checks: dispatches checks
- Driver interface → Rust checks: dispatches checks
- Driver interface → TypeScript checks: dispatches checks
- Regression checks → Sandbox executor: runs test commands
- Law checks → Sandbox executor: runs law commands
- Change proving → Sandbox executor: runs proving tests
- Behavior comparison → Sandbox executor: runs comparisons
- Mutation adequacy → Sandbox executor: runs mutants
- Done check → Fixed decision table: classifies evidence
README.md - Done check → Receipt and action: assembles findings
crates/emi-done/src/lib.rs - Fixed decision table → Receipt and action: selects action
crates/emi-done/src/receipt.rs - Done check → Check state: records check state
- Receipt and action → Engineer or agent: reports outcome
README.md