Gate Runner

This documentation was generated with the assistance of AI. Please report any inaccuracies.

A custom agent that runs a single verification/quality-gate skill — tests, coverage, code-quality/lint, license headers, doc-comment audits, UI test runs, security scans, or a full project build — across any of the catalog’s language tracks (Java and Kotlin on Maven or Gradle, Spring Boot, Quarkus, PHP, .NET, TypeScript including NestJS and Next.js, Python including FastAPI and Django, Android, Kotlin Multiplatform, React Native, Swift, Windows desktop apps, Rust, Go), in an isolated context, optionally diffs the result against a baseline, and reports back only a compact, structured summary.

Purpose

iru-gate-runner exists to collapse a pattern that used to be hand-written, nearly identically, at more than a dozen call sites across iru-code, iru-code-one-task-group, and every <key>-code-one-task-group skill (iru-java-code-one-task-group, iru-java-springboot-code-one-task-group, iru-kotlin-springboot-code-one-task-group, iru-quarkus-code-one-task-group, iru-php-code-one-task-group, iru-dotnet-code-one-task-group, iru-typescript-code-one-task-group, iru-nestjs-code-one-task-group, iru-nextjs-code-one-task-group, iru-fastapi-code-one-task-group, iru-django-code-one-task-group, iru-android-code-one-task-group, iru-kmp-code-one-task-group, iru-react-native-code-one-task-group, iru-windows-code-one-task-group, iru-rust-code-one-task-group, iru-go-code-one-task-group, iru-swift-code-one-task-group): invoke a verification skill, diff it against a baseline if one is given, and return only the distilled outcome — never the raw Surefire/JaCoCo/lcov/clover.xml/xccov/SARIF/checkstyle-result.xml/pmd.xml/spotbugsXml.xml/eslint/detekt/ktlint/ phpstan/psalm/phpcs/swiftlint/detect-secrets output or a full build log. Centralizing the "report back only X, not the full report" convention in one agent definition means it only has to be stated — and changed, if it ever needs to be — once.

It always prefers invoking the matching Claude Code skill over a raw command:

  • Tests — iru-java-test (Maven or Gradle, Java or Kotlin sources), iru-dotnet-test (incl. Windows desktop solutions — WPF/WinUI/WinForms — with a ui selector for FlaUI desktop UI tests on Windows), iru-typescript-test, iru-php-test (Pest/PHPUnit), iru-python-test (pytest, incl. pytest-django), iru-android-test, iru-kmp-test (Kotlin Multiplatform — Android host/JVM tests, plus Kotlin/Native iOS tests and the iOS host app’s XCTest on macOS), iru-swift-test, iru-rust-test (cargo-nextest or cargo test, doctests, #[ignore]`d container tests), `iru-go-test (go test -json, -race, integration build tag).

  • Coverage — iru-java-coverage (JaCoCo from Maven or Gradle, quarkus-jacoco, or Kover), iru-dotnet-coverage, iru-typescript-coverage (lcov line/branch %), iru-php-coverage (PHPUnit/Pest Clover XML line %; branch coverage reported as unavailable rather than invented), iru-python-coverage (coverage.py Cobertura XML line/branch %), iru-android-coverage (JaCoCo XML line/branch %), iru-kmp-coverage (Kover XML line/branch %; JVM/Android targets only — iOS reported as not measurable), iru-swift-coverage (llvm-cov/xccov %), iru-rust-coverage (cargo-llvm-cov line/region %), iru-go-coverage (coverprofile statement %; Go has no branch coverage).

  • Code quality/lint — iru-java-code-quality (Checkstyle/PMD/SpotBugs), iru-dotnet-code-quality (StyleCop/CA rules), iru-kotlin-code-quality (detekt/ktlint), iru-typescript-code-quality (ESLint/Biome/oxlint), iru-php-code-quality (PHPStan/Psalm error identifiers, PHPCS/Pint/PHP-CS-Fixer sniffs and rules), iru-python-code-quality (Ruff rule codes, mypy error codes, Bandit test ids), iru-android-code-quality (Detekt/ktlint/Android Lint), iru-kmp-code-quality (detekt/ktlint/Android Lint/SwiftLint across KMP modules), iru-swift-code-quality (SwiftLint), iru-rust-code-quality (clippy lint ids, rustfmt, cargo-deny), iru-go-code-quality (golangci-lint <linter>:<rule> ids, go vet, govulncheck) — all keyed by the tool’s own stable rule id so a baseline diff matches on rule plus file, not on message text or shifting line numbers.

  • Doc-comment audits — iru-java-javadoc, iru-kotlin-kdoc (KDoc/Dokka), iru-dotnet-docfx, iru-typescript-tsdoc, iru-php-phpdoc, iru-python-docstrings (docstrings + Sphinx), iru-android-dokka, iru-kmp-dokka (KDoc + Dokka multiplatform), iru-swift-docc, iru-rust-rustdoc (rustdoc + doctests), iru-go-godoc (Go doc comments).

  • UI test runs — the ui/e2e selector of the test gates (iru-android-test, iru-dotnet-test, iru-typescript-test, iru-swift-test, …​) that runs component, screen and flow tests capturing .ui-screenshots/ across states, left-to-right/right-to-left and light/dark, with accessibility checks applied at the level set in .ui-quality.yml. See Building user interfaces.

  • iru-check-license, iru-check-security, and full project builds (Maven, Gradle, npm, Composer, uv, Cargo, Go, …​).

It falls back to the equivalent raw command (mvn test -Dtest=X, ./gradlew test --tests X, dotnet test --filter, vendor/bin/phpunit --filter X, uv run pytest tests/test_x.py, …​) only when the prompt says the matching skill is unavailable or none exists in the repository. If an invoked skill needs a decision only a person can make (for example `iru-check-license’s header convention or `iru-check-security’s audit labeling), the agent lets that skill surface its own question and relays the user’s choice in its report, and it never modifies files beyond what the invoked skill does itself.

What it reports is exactly what the prompt asks for: for runs and builds, only pass or the failing names with their reasons; for coverage, only the requested percentages; for quality/security scans, a per-tool issue count and the per-file list (or only the newly introduced issues when a baseline was supplied); for license and doc audits, which files were missing, fixed or compliant; for UI test runs, pass/fail plus the screenshot count per kind (component/screen/flow), any malformed screenshot file name, any screen or component missing a state × direction × theme capture, the accessibility level applied and the violation count by rule id (never the images or the raw accessibility report), and every UI stage that could not run (no browser, device, simulator or host OS) reported as unverified with its reason.

When .ui-quality.yml says accessibility: none (opted out entirely) or off (rules apply, checks not run), accessibility checks are not applicable: it skips them and reports "accessibility: opted out" (none) or "accessibility checks off" (off) — never "unverified" and never a failure.

Plugin

Shipped by the iru-core plugin of the ai-catalog marketplace (install with /plugin install iru-core@ai-catalog; see Plugins).

Tools

Skill, Bash, Read — enough to invoke a skill (or fall back to a raw command) and read whatever report file it produces; no Edit/Write access, since this agent only runs and reports, it never modifies files itself.

The agent is pinned to model: haiku. Callers dispatch it as subagent_type: "iru-gate-runner" when it is installed under .claude/agents/, or as "iru-core:iru-gate-runner" when it is installed through the iru-core plugin (use whichever name appears in the available agent types).

Used by

Why this one specifically

Every one of these delegations exists to keep something noisy (a report, a build log) out of the calling skill’s own context window, and to diff against a baseline so only newly-introduced issues are ever reported — not to use any capability unique to a broadly-scoped agent. A narrow, purpose-built agent with Skill/Bash/ Read-only tool access is a tighter fit than the default general-purpose type, and lets every caller state the delegation in one line ("run X, diff against this baseline, report Y") instead of re-explaining the summarize-don’t-dump convention every time.

Source

iru-gate-runner.md on GitHub — the file this page was generated from.