Imported from contagon/evalio (
AGENTS.md). Install upstream withnpx skills add contagon/evalio. Copyright stays with the author.
AGENTS.md
Project Overview
Commands
- Sync deps:
uv sync --dev --all-extras - Rebuild C++ extension:
just pybuild(touchespyproject.toml, runsuv sync, copies the compiled_cppfromsite-packagesintopython/evalio/) - Test:
uv run pytest -v - Typecheck:
uv run basedpyright - Lint:
ruff check
Architecture
- Python package lives in
python/evalio/; C++ nanobind extension source incpp/(bindings incpp/bindings/) tests/is the only pytesttestpathspython/typings/holds vendored type stubs (basedpyrightstubPath)- The C++ portion builds lidar odometry pipelines as well, they are stored in
cpp/bindings/pipelines-srcand should not be edited directly without confirmation.
Local Dependencies
No local sibling dependencies; all deps are installed from PyPI.
Quirks
- After any C++ change (
cpp/**orCMakeLists.txt), runjust pybuildto rebuild and refresh the compiled_cppinpython/evalio/ - CI installs the package as a wheel (
UV_NO_EDITABLE=true), not editable
Accuracy, recency, and sourcing (REQUIRED)
Editing files
- Make the smallest safe change that solves the issue.
- Preserve existing style and conventions.
- Prefer patch-style edits (small, reviewable diffs) over full-file rewrites.
- After making changes, run the project’s standard checks when feasible (format/lint, unit tests, build/typecheck).
- Never remove comments unless there are no longer valid
- NEVER utilize git stash or other git commands that would remove local changes
- Keep all code comments to two lines and under. Only comment for mathematical explanations or clarifying difficult code.
Baseline workflow
- Start every task by determining:
- Goal + acceptance criteria.
- Constraints (time, safety, scope).
- What must be inspected (files, commands, tests, docs).
- Whether the request depends on recency (if yes, apply the "Accuracy, recency, and sourcing" rules).
- If requirements are ambiguous, ask targeted clarifying questions before making irreversible changes.
Continuity Ledger (compaction-safe)
Maintain a single continuity file for this workspace: CONTINUITY.md.
CONTINUITY.md is the canonical briefing designed to survive compaction; do not rely on earlier chat/tool output unless it's reflected there.
Operating rule
- At the start of each assistant turn: read
CONTINUITY.mdbefore acting. - Update
CONTINUITY.mdonly when there is a meaningful delta in: Goal/success criteria, Invariants/constraints, Decisions, State (Done/Now/Next), Open questions, Working set, or important tool outcomes.
Keep it bounded (anti-bloat)
- Keep
CONTINUITY.mdshort and high-signal:Snapshot: ≤ 25 lines.Done (recent): ≤ 7 bullets.Working set: ≤ 12 paths.Receipts: keep last 10–20 entries.
- If sections exceed caps, compress older items into milestone bullets with pointers (commit/PR/log path/doc path). Do not paste raw logs.
Anti-drift rules
- Facts only, no transcripts.
- Every entry must include:
- a date or ISO timestamp (e.g.,
2026-01-13or2026-01-13T09:42Z) - a provenance tag:
[USER],[CODE],[TOOL],[ASSUMPTION]
- a date or ISO timestamp (e.g.,
- If unknown, write
UNCONFIRMED(never guess). If something changes, supersede it explicitly (don't silently rewrite history).
Decisions and incidents
- Record durable choices in
Decisionsas ADR-lite entries (e.g.,D001 ACTIVE: …). - For recurring weirdness, create a small, stable incident capsule (Symptoms / Evidence pointers / Mitigation / Status).
Plan tool vs ledger
- Use
update_planfor short-term execution scaffolding (3–7 steps). - Use
CONTINUITY.mdfor long-running continuity ("what/why/current state"), not micro task lists. - Keep them consistent at the intent/progress level.
In replies
- Start with a brief "Ledger Snapshot" (Goal + Now + Next + Open Questions).
- Print the full ledger only when it materially changed or the user requests it.