iccDEV
AGENTS.md187 starsChanged 6 months agoBSD-3-ClauseView on GitHub
This file is a short navigation aid for automated coding agents and maintainers. Detailed rules live in .github/copilot-instructions.md and .github/instructions/*.instructions.md. AGENTS.md is the canonical agent-instruction file. GitHub Copilot also recognizes CLAUDE.md (Anthropic Claude) and GEMINI.md (Google Gemini) at the repository root; both are thin mirrors that route back here so every agent shares one source of truth. Update rules here, not in the mirrors. - Check git --no-pager status --short --branch before edits. - Prefer focused changes with exact repros…
We split this AGENTS.md into the rules it gives an agent
17 rules. About 0 are common, 5 are distinctive, and 12 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈5
Distinctive · estimate
This author's own choices. Worth a look.
12
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 14
Check git --no-pager status --short --branch before edits.
- Distinctive: line 15
Prefer focused changes with exact repros and regression coverage.
- Very specific: line 16
Keep documentation links Doxygen-safe: use relative Markdown links for generated Markdown pages and \ref for generated source files.
- Very specific: line 25
Keep HAVE_DOT=YES for checked-in diagrams.
- Very specific: line 27
Use 2-space C++ indentation, K&R braces, m_ members, and return-value errors.
- Very specific: line 29
Use sanitizer builds for bug hunting.
- Distinctive: line 30
Add the nearest regression test for behavior fixes.
- Very specific: line 44
Before the first automated review, record a base...HEAD contract matrix for every changed cross-cutting surface: producer, consumer, …
- Very specific: line 50
Every new or relocated ICC-owned C/C++ source or header must retain the complete BSD-3-Clause notice derived from LICENSE.md.
- Very specific: line 57
Keep the pure Python iccdev-mcp Python 3.10+ package contract separate from the compiled iccdev CPython 3.11-3.14 wheel contract.
- Distinctive: line 155
Keep the six command-line CFL targets as filesystem-backed CLI wrappers.
- Distinctive: line 166
Keep them separate rather than folding serialization into the model target, so a crash stays attributable to one layer.
- Very specific: line 170
Keep its address, undefined, and memory builds separate, pass all compiler and linker instrumentation through the OSS-Fuzz environment, …
- Very specific: line 179
Keep cmmapply controls outside the ICC header: an optional three-byte trailer selects direction, intent, and interpolation without …
- Very specific: line 208
Use .github/skills/wasm-build-test/SKILL.md for the current module smoke and profile parity checks.
- Very specific: line 213
Use vs2022-clangcl-x64-avx2-diagnostics for a Windows source-level AVX2 debugging session.
- Very specific: line 219
Use .github/scripts/iccdev-windows-clut-avx2-benchmark.ps1 for interleaved Release comparisons across 8-16 outputs.
≈ “Common” is an estimate: at least 1 in 5 of the 36,368 AGENTS.md files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
AGENTS.md -- iccDEV
This file is a short navigation aid for automated coding agents and maintainers.
Detailed rules live in .github/copilot-instructions.md and
.github/instructions/*.instructions.md.
AGENTS.md is the canonical agent-instruction file. GitHub Copilot also
recognizes CLAUDE.md (Anthropic Claude) and GEMINI.md (Google Gemini) at the
repository root; both are thin mirrors that route back here so every agent
shares one source of truth. Update rules here, not in the mirrors.
Ground Rules
- Check
git --no-pager status --short --branchbefore edits. - Prefer focused changes with exact repros and regression coverage.
- Keep documentation links Doxygen-safe: use relative Markdown links for
generated Markdown pages and
\reffor generated source files. Use absolute GitHub HTML anchors for repo-only resources; relative HTML anchors can break in the packaged site even when Doxygen emits no warning. Before handing off documentation changes, run the bounded graph-light Doxygen check indocs/documentation-maintenance.mdand require an emptydocs/generated/doxygen-warnings.log. Time is valuable: reserve full graph generation for release packaging or graph changes, not routine prose edits. KeepHAVE_DOT=YESfor checked-in diagrams; leave CTest implementation and fixtures outside the generated package. Do not add generated output to Git. - Use 2-space C++ indentation, K&R braces,
m_members, and return-value errors. - Exit 1-127 is graceful failure. Exit 128+ is signal termination.
- Use sanitizer builds for bug hunting; see
.github/instructions/build-system.instructions.md. - Add the nearest regression test for behavior fixes.
- For legacy packed intent decoding and named-color overprint behavior, keep
iccApplyNamedCmmandiccApplySearchcoverage aligned with.github/scripts/iccdev-applynamedcmm-cli-args-regression.sh,.github/scripts/iccdev-applysearch-cli-args-regression.sh, and.github/scripts/iccdev-namedcolor-overprint-regression-tests.sh. - For maintainer pre-PR validation, use the current maintainer image and local
tools for applicable builds, preflight, scanners, and dynamic checks. On the
pushed pre-PR branch, run
ci-qa-prwithctest-mode=fullandctest-recent-limit=0plusci-codeql-securityon the same head. Record terminal results before opening an explicitly authorized PR. Runci-pr-actionon the PR head for final cross-platform builds, profile checks, and representative CTest coverage; it does not replace the local or pre-PR screening. - Before the first automated review, record a
base...HEADcontract matrix for every changed cross-cutting surface: producer, consumer, build/runtime behavior, platform or toolchain boundary, CI trigger, dependency owner, and local evidence. A later update still requires the complete contract matrix, not a delta-only review. Any newly found blocker returns the branch to branch-only grooming before another review. - Every new or relocated ICC-owned C/C++ source or header must retain the
complete BSD-3-Clause notice derived from
LICENSE.md; run.github/scripts/check-license-notices.pybefore review. Abbreviated, placeholder, or omitted notices are blocking defects. Preserve third-party and generated-file attribution as directed by their provenance. - For MCP runtime checks, validate every Docker image variant against its discovered capabilities. Do not hard-code a total tool count.
- Keep the pure Python
iccdev-mcpPython 3.10+ package contract separate from the compilediccdevCPython 3.11-3.14 wheel contract. For MCP behavior or packaging changes, use.github/skills/mcp-server-qa/SKILL.mdand require source tests plus the relevant installed-package, native, or image smoke; record skipped native tests as unverified coverage. - The published unified container is a native
linux/amd64andlinux/arm64manifest. Build and smoke each platform before publishing a tag; Apple Silicon Docker hosts must selectlinux/arm64without emulation. - Python CI and rolling-release wheels share
_build-python-wheels.ymlbetweenci-json-pythonandci-latest-release, with Python 3.13 driving cibuildwheel 3.4.0 for all seven platform lanes. Keep installed-wheel tests and their binary NumPy dependency aligned across all lanes. Primary CI disables shared wheel artifact upload and fails on empty test collection; release CI enables explicitly named artifact intake validated by.github/scripts/validate-python-release-wheels.pywith an independent--laneinventory, complete license checks, checksums, and provenance; PyPI publication uses explicitpypi_packagesselection on the manualci-latest-release.ymlworkflow. Keepiccdevandiccdev-mcpstaging, trusted-publisher identities, outcomes, and post-publication smoke tests separate. Run public-package smoke tests after every selected publication and report their diagnostic outcomes without blocking later package publications. Require complete package inventories, dual checksums, release attestations, the protectedreleaseenvironment, and OIDC publishing. Validate downloaded release wheels with--releaseto require all 36 targets without CI identifier files. Require RECORD file coverage, secure hashes, and sizes before attestation; ZIP CRCs alone do not prove this contract. - Rolling-release MCP artifacts are a separate universal wheel and sdist,
validated by
.github/scripts/validate-mcp-release-package.py. Keep the Windows/Linux source, installed wheel, and installed sdist checks in themcp-packagejob. Prove parent/child imports and console stdio/REST behavior withiccdev-mcp-package-smoke.py; do not infer installed behavior from editable installs. Preserve theiccdev_mcpnamespace and optional native capability failures. MCP distributions participate in checksums/provenance; publish them through the same protected trusted-publishing workflow without combining the MCP package contract with the compiled-wheel inventory. - MATLAB public entry points that require arguments must provide actionable
bare-invocation errors pinned by
matlab/tests/test_usage_guidance.m. Interactive examples must show visible UI defaults first; label hidden or headless options as automation-only. Shape errors must explain row semantics and include copy/paste-ready single-item and batch examples.
Navigation
| Need | File |
| Build, test, style, CI | .github/copilot-instructions.md |
| Apple mobile static cores and smoke app | docs/build.md |
| Manual iOS example app helpers | examples/ios-apply-preview/README.md, examples/ios-benchapply/README.md, examples/ios-clut-editor/README.md, .github/skills/ios-manual-examples/SKILL.md |
| iOS CLUT editor POC | examples/ios-clut-editor/README.md, .github/skills/ios-clut-editor/SKILL.md |
| AVX2 CLUT diagnostics and optimization handoff | docs/avx2-clut-diagnostics.md |
| Pull request preparation and handoff | docs/pre-pr-security-cycle.md |
| Release version bump | .github/skills/version-bump/SKILL.md, .github/prompts/version-bump.prompt.md |
| Maintainer local Git/devenv defaults | docs/linear-stack-workflow.md |
| ClusterFuzzLite integration | .github/ci/cfl/README.md, .github/skills/clusterfuzzlite/SKILL.md |
| Pre-PR security skill | .github/skills/pre-pr-security-cycle/SKILL.md |
| Pre-PR security prompt | .github/prompts/pre-pr-security-cycle.prompt.md |
| Stacked PR and fast-lane workflow | .github/skills/stacked-pr-fast-lane/SKILL.md |
| Focused pull request review | .github/skills/code-review/SKILL.md |
| Code-review bug hunting | .github/prompts/code-review-hunting.prompt.md |
| Regression bisect workflow | .github/prompts/bisect-regression.prompt.md |
| Unified maintainer container | docs/regression-container.md |
| Memcheck, Helgrind, DRD, Massif, and Callgrind | docs/valgrind-analysis.md, .github/skills/valgrind-analysis/SKILL.md |
| Regression container prompt | .github/prompts/regression-container-maintainer.prompt.md |
| Maintainer CTest selection and CI budget | .github/skills/maintainer-ci-ctest/SKILL.md |
| ICC.2 spectral, bi-spectral, and MCS XML QA | docs/xml-spec-qa.md, .github/skills/icc2-xml-spec-qa/SKILL.md |
| ICC XML and JSON corpus round-trip QA | docs/xml-json-roundtrip-qa.md, .github/skills/xml-json-roundtrip-qa/SKILL.md |
| New CLI tool onboarding | .github/prompts/add-new-tool.prompt.md |
| Manual iOS examples | .github/prompts/ios-manual-examples.prompt.md |
| iOS CLUT editor planning | .github/prompts/ios-clut-editor.prompt.md |
| Contributor onboarding | .github/prompts/contributor-onboarding.prompt.md |
| Apply-path throughput benchmark | Tools/CmdLine/IccBenchApply/Readme.md |
| Native HEIF inspection and extraction QA | Tools/CmdLine/IccHeifDump/Readme.md, .github/ci/test-data/heif/Readme.md |
| Security repro | .github/prompts/reproduce-security-issue.prompt.md |
| iccSpecSepToTiff QA | .github/skills/specsep-qa/SKILL.md |
| IIS ISAPI endpoint QA | .github/skills/iis-isapi-qa/SKILL.md |
| Issue filing format | .github/prompts/file-security-issue.prompt.md |
| Library hardening | .github/instructions/icc-library-code.instructions.md |
| Workflow hardening | .github/instructions/workflow-governance.instructions.md |
| Maintainer label system | docs/label-system.md |
| Label triage prompt | .github/prompts/maintainer-label-triage.prompt.md |
| Label triage audit agent | .github/agents/maintainer-label-triage.agent.md |
| Testing details | .github/instructions/testing.instructions.md |
| Python bindings | .github/instructions/python-bindings.instructions.md |
| MATLAB MEX bindings | .github/instructions/matlab-mex.instructions.md |
| MATLAB MEX code review | .github/instructions/matlab-code-review.instructions.md |
| MATLAB build, IccJSON conversion, and QA | docs/matlab-bindings.md |
| MATLAB binding and IccJSON tests | .github/skills/matlab-bindings-test/SKILL.md |
| MATLAB binding debug | .github/prompts/debug-matlab-bindings.prompt.md |
| Python binding tests | .github/skills/python-bindings-test/SKILL.md |
| MCP server QA and package/runtime handoff | .github/skills/mcp-server-qa/SKILL.md, iccdev-mcp/docs/build-and-test.md |
| WASM build tests | .github/skills/wasm-build-test/SKILL.md |
| MCP subprocess debug | .github/prompts/debug-mcp-subprocess.prompt.md |
| Python/Cython debug | .github/prompts/debug-python-bindings.prompt.md |
| Documentation maintenance | docs/documentation-maintenance.md |
PCS adjustment placement (CIccPcsXform refactor) | docs/pcs-adjustment-placement.md |
CFL Harness Scope
Keep the six command-line CFL targets as filesystem-backed CLI wrappers. The
in-process targets are the intentional exceptions: consume only public headers,
compile the engine sources as separate translation units, and never include a
CLI implementation or call processLuts().
| group | targets | covers |
core | profileparse, cmmapply, profilevisualize, writerserialize | profile parsing, bounded CMM application, visualization, and serialization |
formats | xmlparse, jsonparse, connectconfig | XML/JSON profile parsing and IccConnect configuration round trips |
assessment | pawgreport | in-memory PAWG assessment and compression verdicts |
Keep them separate rather than folding serialization into the model target, so a crash stays attributable to one layer.
The official ClusterFuzzLite lane builds all eight in-process targets above.
Keep its address, undefined, and memory builds separate, pass all compiler
and linker instrumentation through the OSS-Fuzz environment, require matching
Clang 21 or 22 compilers across AFL, CFL, and ClusterFuzzLite, and keep the
workflow limited to manual dispatch and the nightly schedule.
The ClusterFuzzLite memory build must bootstrap the pinned instrumented libc++
and libc++abi, reject libstdc++ or another libc++ at runtime, and replay the
pinned #2687 artifact before fuzzing. A report crossing an uninstrumented C++
runtime boundary is not attributable to iccDEV.
Keep cmmapply controls outside the ICC header: an optional three-byte trailer
selects direction, intent, and interpolation without corrupting the encoded
profile size. Keep at least one schema-shaped IccConnect configuration seed in
.github/ci/test-data, use the dedicated config dictionary, and preserve
round-trip coverage for top-level and nested CIccCfg* objects.
Temporary CFL MSan workarounds live as individual issue patches under
.github/ci/fuzz-patches/cfl. The default fuzz build attempts every patch and
continues after drift or prior integration; --strict is only for maintaining
the patch inventory. Retire one issue patch at a time after its normal source
fix lands.
An in-process target that needs a CLUT raster also needs a corpus that still
contains one. max_seed_bytes and libFuzzer's max_len both removed the only
CLUT-bearing seed at their old defaults (#2120), which left such a target
reporting runs, coverage and a clean exit while never executing the layer it
exists to cover. Both defaults now admit it, and dropping a seed committed
under .github/ci/test-data is a hard error rather than a silent prune. Raise
max_len alongside the cap when adding a target that consumes large structured
inputs -- they are independent gates. Validate with
.github/ci/cfl/build.sh --targets profilevisualize,writerserialize --seconds 30WASM Scope
WASM now ships as a staged Node/npm-style module package. Do not expect or
restore legacy wasm/*.html, wasm/*.css, or wasm/*.js browser UI assets.
Use .github/skills/wasm-build-test/SKILL.md for the current module smoke and
profile parity checks.
AVX2 CLUT Diagnostics
Use vs2022-clangcl-x64-avx2-diagnostics for a Windows source-level AVX2
debugging session. It enables ICC_AVX2_CLUT_DEBUG, which traces runtime
dispatch and kernel inputs through IccSignatureUtils.h. Do not use the
diagnostic preset for throughput comparisons; use the matching
vs2022-clangcl-x64-avx2-qa-flags build for measurements. The focused
regression is iccdev.clut-eight-output-regression.
Use .github/scripts/iccdev-windows-clut-avx2-benchmark.ps1 for interleaved
Release comparisons across 8-16 outputs. Windows AVX2 is a ClangCL path;
native MSVC intentionally retains SSE2 after measured AVX2 regressions.
Runtime AVX2 dispatch is limited to 15 outputs. Require
output_vector_match=True for every benchmark row.
For Linux evidence collection, configure a separate Release build with
ICCDEV_ENABLE_TELEMETRY=ON and use
.github/scripts/iccdev-clut-profile.sh. The script writes timing
distributions, hardware-counter CSVs, syscall summaries, and optional
FlameGraph inputs; keep profiling and source-coverage builds separate from
release measurements.
Where files are headingNew AGENTS.md files have more rules about keeping secrets out of the code, and fewer about code style.
Of the AGENTS.md files we read, the 28,693 first seen in the last six months, against the older ones: the kind of rule that gained most share, and the kind that lost most. About files like this in general, not this one, and an estimate, since a kind is a pattern in the words.
In this repository29 other files it gives its agents.
- CLAUDE.mdCLAUDE.md
- .github/copilot-instructions.mdCopilot instructions
- afl-smokeSkill
- avx2-clut-diagnosticsSkill
- clusterfuzzliteSkill
- code-reviewSkill
- docs-maintenanceSkill
- icc2-xml-spec-qaSkill
- iis-isapi-qaSkill
- ios-clut-editorSkill
- ios-manual-examplesSkill
- json-config-regressionSkill
- maintainer-ci-ctestSkill
- maintainer-label-systemSkill
- matlab-bindings-testSkill
- mcp-server-qaSkill
- pre-pr-security-cycleSkill
- python-bindings-testSkill
- regression-container-maintainerSkill
- regression-workflow-governanceSkill
- sanitizer-reproSkill
- specsep-qaSkill
- stacked-pr-fast-laneSkill
- upstream-pr-readinessSkill
- valgrind-analysisSkill
- vcpkg-export-consumer-debugSkill
- version-bumpSkill
- wasm-build-testSkill
- xml-json-roundtrip-qaSkill
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

