Explore
| This documentation was generated with the assistance of AI. Please report any inaccuracies. |
Produce a grounded understanding of this repository’s codebase and, when available, of a specific tracked ticket — a GitHub issue or a Jira ticket — without writing a plan or making code changes. This is read-only research: its output is a report, not a diff.
Purpose
iru-explore gets an agent (or a human) oriented before any decision or code change is made. Given a ticket id, it
auto-detects whether it’s a GitHub issue or a Jira key and narrows the investigation to only the areas that
ticket implicates; given none, it does a general architectural tour of the repository. For a Jira ticket, it also
fetches the ticket’s epic and any linked/related tickets one hop out (since an epic or a linked ticket often
carries context — a shared constraint, what a "blocks"/"relates to" link actually means — that the leaf ticket’s
own fields omit), and downloads and reads any implementation_plan_*.md file attached to the ticket, its epic, or
its linked tickets: exactly the naming convention iru-code archives completed plans under and iru-issue
attaches back onto a resolved ticket, so a match here is a previously-completed plan for similar or related work
travelling with the ticket itself. It also detects which platform hosts the repository (GitHub, Bitbucket, Azure
DevOps, or TFS) and the language(s)/framework(s) in play — both in the existing codebase and in whatever change is
being requested — so its "Tech stack" report can be reused directly by later skills (iru-plan, iru-code,
iru-update-docs, PR/branch creation) instead of each re-detecting the same facts. Language/framework detection
covers Vite+React, Angular CLI, Hilla (Spring Boot + Vaadin + Hilla), Kotlin Spring Boot, Quarkus (Java or Kotlin),
NestJS, Next.js, PHP (Laravel, WordPress plugin/theme, PrestaShop module, plain Composer package), Python (FastAPI, Django, plain package), React Native (Expo vs. bare Metro toolchain),
Ionic/Capacitor, Kotlin Multiplatform (Compose Multiplatform vs. native UI), Android (library vs. application, Compose), SwiftPM/Xcode/XcodeGen/Tuist stacks (Apple apps' target platforms incl. visionOS, SwiftUI vs. UIKit, MVVM vs. MVC), macOS desktop apps (SwiftUI vs. AppKit, MVVM vs. MVC), and Windows desktop apps on .NET (WPF, WinUI 3, Windows Forms; MVVM vs. MVC), and command-line tools (Rust clap/Ratatui, Go Cobra/Bubble Tea, Swift ArgumentParser, .NET System.CommandLine — with the terminal-UI library and e2e test setup), in addition to
the classic Java/.NET ones and plain Rust/Go projects — for JVM backends it also records the build tool (Maven vs. Gradle
Kotlin/Groovy DSL, wrapper) and whether the layout is a hexagonal multi-module reactor or layered, and for NestJS,
Next.js, PHP, and Python (requires-python, package manager, test runner, settings module/API layer/persistence) the module format/test runner/router/version details — and the report boils that detection down to a single normalized Project type: line — the
shared vocabulary the iru-setup-repository bootstrap front door reads to pre-select the right stack orchestrator
on an existing repository. This works even when the current
working directory isn’t a git repository at all: it warns the user once, records that explicitly, and keeps going
with whatever sources don’t need git (a Jira ticket, a documentation MCP, and any files actually present) — a
GitHub issue lookup in that case falls back to asking the user for the target owner/repo explicitly. It also
checks for a .archive/ directory — where iru-code archives every completed implementation_plan.md — and, if
it holds a plan whose topic overlaps with the current task, reads it as concrete precedent for how a similar task
was previously scoped and broken into task groups, rather than planning from a cold start. If a documentation MCP
(e.g. Confluence, Notion) is connected, it also does a targeted search for pages relevant to the ticket or
codebase, folding anything relevant into the report as extra context for a later plan. Either way it never edits
a file, and it never proposes an implementation — that is `iru-plan’s job, run as a separate, explicit step.
Plugin
Shipped by the iru-core plugin of the ai-catalog marketplace (install with /plugin install iru-core@ai-catalog; see Plugins).
Inputs
| Argument | Required | Description | Default |
|---|---|---|---|
|
No |
A GitHub issue number or a Jira key (e.g. |
None — if omitted, the skill asks whether to explore a specific ticket anyway; declining falls back to a general codebase tour. |
Outputs
-
A plain-text report in the conversation — never a written file.
-
Always a Tech stack section: codebase languages/frameworks (per module, if more than one), the languages/frameworks implicated by the requested change, a normalized
Project type:line, the Antora docs location (or "none found"), anAccessibility:line (present,partial,absent, or not applicable without a UI, with the evidence summary and the.ui-quality.ymllevel:enforce,report,off,noneor missing), and the detected repository host (GitHub/Bitbucket/Azure DevOps/TFS, "no remote configured", or "none — not a git repository") — structured so later skills in the same conversation can read it directly instead of re-detecting it. It also carries a User interface line:none, or the UI stack(s) and where, rough counts of screens and reusable components, the.ui-quality.ymlaccessibility level when present, and whether the Antora module already has aui/section (or, for a requested change that adds UI, the screens/components it introduces) — which tellsiru-planto decompose the work into screens/components with virtualized collections, UI tests, screenshots and accessibility checks (omitted whenaccessibility: none), andiru-update-docsto maintain the UI pages (see Building user interfaces). -
The
Project type:line is a single-token-per-module normalization of the detected stack — this exact vocabulary is a shared contract withiru-setup-repository, which reads it verbatim to pre-select the right bootstrap flow on an existing repository:Value Meaning java-libraryJava/Kotlin library (
pom.xml/build.gradle*, no Spring Boot, no Quarkus, no Android plugin)java-springbootSpring Boot service (no Hilla markers)
java-springboot-hillaSpring Boot + Vaadin + Hilla (
hilla-spring-boot-starter/vaadin-spring-boot-starter,@vaadin/hilla,src/main/frontend/)kotlin-springbootKotlin Spring Boot service (Kotlin plugin or
src/main/kotlin/plusspring-boot-starter*, no Hilla markers)kotlin-springboot-hillaKotlin Spring Boot plus the Hilla markers
java-quarkusQuarkus service in Java (
io.quarkusplugin,quarkus-bom, orio.quarkus:quarkus-*dependencies)kotlin-quarkusQuarkus service in Kotlin (
quarkus-kotlin, Kotlin plugin, orsrc/main/kotlin/)typescript-libraryPlain TypeScript/npm library, no app framework
react-webVite + React (or another React web setup, not Native/Ionic)
angular-webAngular CLI web app, not layered under Ionic
nestjsNestJS backend (
@nestjs/core,nest-cli.json,NestFactoryinsrc/main.ts)nextjsNext.js web app (
nextdependency,next.config.*,app/and/orpages/)php-laravelLaravel application (
laravel/frameworkplusartisan)php-wordpress-pluginWordPress plugin (main PHP file with a
Plugin Name:header)php-wordpress-themeWordPress theme (
style.csswithTheme Name:and/ortheme.json)php-prestashop-modulePrestaShop module (class extending
Module,config.xml)php-libraryAny other Composer package with no Laravel/WordPress/PrestaShop markers
python-fastapiFastAPI service (
fastapidependency plus aFastAPI(app, e.g.app/main.py)python-djangoDjango project (
djangodependency plus amanage.py)python-libraryAny other Python package (
pyproject.toml/setup.py, no Django/FastAPI/other web framework)android-libraryGradle
com.android.librarymoduleandroid-appGradle
com.android.applicationmoduleswift-librarySwiftPM
.library(…)productapple-appAn Xcode/XcodeGen/Tuist app target (or a SwiftPM
.executable(…)product that is not an ArgumentParser command-line tool) — lists detected platforms in parentheses (ios,ipados,macos,watchos,visionos); itsBuild & layout:line records the iOS target’s UI framework (swiftui, oruikit— aUIApplicationDelegate+UIWindowSceneDelegatewith no SwiftUIApp) and MVVM vs. MVC fromPackages/Core/Sources/Core/ViewModels/vs.Controllers/macos-appAn Xcode/XcodeGen/Tuist app whose only platform is macOS and that is not in the
iru-setup-apple-appTargets/<Platform>/layout — lists its UI framework in parentheses (swiftuiorappkit). Takes precedence overapple-app (macos)except for aniru-setup-apple-appscaffold (Targets/macOS/…), which staysapple-app (macos); macOS plus any other Apple platform staysapple-appreact-native-appExpo / React Native app — lists its toolchain in parentheses (
expoormetro)kmp-appKotlin Multiplatform app with Android + iOS targets (
iosApp/,commonMain/) — lists its UI approach in parentheses (composeornative); its Android host module is part of the same valueionic-appIonic/Capacitor hybrid app — lists its underlying framework in parentheses (
angularorreact)windows-appA
WinExe*.csprojwithUseWPF/UseWinUI/UseWindowsForms(Windows desktop app) — lists its UI stack in parentheses (wpf,winuiorwinforms); itssrc/<App>.Coreclass library and test projects are part of the same value, never extradotnetentries ormultiplecli-toolA command-line tool — lists its language in parentheses (
rust,go,swiftordotnet): Rust binary +clap(orratatui), Gopackage main+ Cobra/urfave/kong (or Bubble Tea), aPackage.swift.executableTargetonArgumentParser, or anExe*.csproj(no WPF/WinUI/WinForms) withSystem.CommandLine/Spectre.Console.Cli/PackAsTool. ItsBuild & layout:line names the argument parser, the terminal-UI library (ui: tui) and the e2e test setup. Takes precedence overrust/go/swift-library/apple-app/dotnetfor the same module; its library unit (src/lib.rs,internal/,<Bin>Kit,src/<Tool>.Core) and a Rustxtask/member are part of the same valuerustAny other
Cargo.tomlcrate or workspace (library, service)goAny other
go.modmodule (library, service)dotnetAny other .NET project (
.csproj/.fsproj/.sln/.slnx— library, ASP.NET Core, MAUI/Xamarin; a WPF/WinForms library with noWinExestaysdotnet)otherA stack was detected but has no key above (e.g. Vue, Flutter, Micronaut, Flask, Ruby, C/C++, a KMP library with no app)
unknownNothing matched any manifest or source-level signal
multipleMore than one module with a distinct project type — followed by one
<module-path>: <type>sub-line per module -
An optional
Build & layout:line for JVM backends (build tool, wrapper, hexagonal vs. layered), NestJS (module format, test runner, persistence), Next.js (version, router,cacheComponents), PHP (version, test runner), and Python (requires-python, package manager, test runner, FastAPI layout/persistence/Alembic, or Django settings module/app layout/DRF vs. Ninja), React Native (SDK/CLI version, router, EAS, e2e tool), KMP (modules, Kover/detekt/ktlint), Apple apps (iOS UI framework SwiftUI vs. UIKit, MVVM vs. MVC), macOS desktop apps (UI framework, MVVM vs. MVC fromPackages/Core/Sources/Core/ViewModels/vs.Controllers/, App Sandbox/hardened-runtime entitlements,ExportOptions-*.plist/scripts/make-dmg.sh), Windows desktop apps (UI stack, MVVM vs. MVC from the Core project layout, test framework, FlaUI UI tests, MSIX packaging files), and command-line tools (Rust: clap/Ratatui, tokio, assert_cmd/insta, deny.toml, nextest/cargo-llvm-cov; Go: Cobra/Bubble Tea, testscript, golangci-lint, GoReleaser; Swift: ArgumentParser targets; .NET: System.CommandLine, Native AOT, PackAsTool). Django and FastAPI markers win overpython-library; Flask/Pyramid/Tornado areother. -
If a documentation MCP (e.g. Confluence, Notion) is connected: a Related documentation section listing relevant pages found (title, link, one-line summary), or a note that none was relevant/connected.
-
A Related past implementation plans section covering both the local
.archive/check and, for a Jira ticket, anyimplementation_plan_*.mddownloaded from the ticket/epic/linked tickets: name and source (local vs. downloaded) of any plan(s) used as precedent, its original topic, and what carries over — or a note that neither source had anything relevant. -
If a ticket was explored: the task restated in plain language, the specific files/classes/methods relevant to it, how the current code behaves in that area, and anything ambiguous or missing that would block implementation. For a Jira ticket, also its epic (if any) and any linked/related tickets, each with a one-line summary of what it adds.
-
If codebase-only: a summary of the architecture areas covered and anything notable found.
-
If the working directory isn’t a git repository: an explicit warning stating what that disabled (git-remote- dependent tooling,
git loghistory) versus what still ran normally (Jira, a documentation MCP, file-based codebase checks). -
No code, configuration, or documentation is ever modified.
Execution flow
Dependencies
Invoked by
-
Setup Repository — Step 1, to detect the Project type: line when the working directory is non-empty.
-
Setup Readme — Step 2, to get the Project type: line when no report is in the conversation.
-
Plan — Step 3, grounds the plan in the codebase unless already explored in the conversation.
-
Issue — Step 5.1, to explore the ticket.
-
PR Review — Step 5, learns architecture, conventions and tech stack before judging the diff.
-
Create GitHub Issue and Create Jira Ticket — each runs
iru-explorewith no argument (general orientation, since no ticket exists yet) to ground the ticket they draft in the real codebase. -
Knowledge to Issue — runs
iru-explorewith no argument to ground the purpose statement it synthesizes for a converted agreement in the real codebase, reused as-is when it then runsiru-create-github-issue. -
Knowledge to Jira — the Jira counterpart: same use of
iru-explorewith no argument to ground the purpose statement it synthesizes, reused as-is when it then runsiru-create-jira-ticket. -
Database Code One Task — reused from earlier in the conversation if it already ran, or run fresh otherwise, to ground the query/queries in the real schema, database engine, and any ticket context.
-
Java Spring Boot Performance Tests — Step 1, to survey a large service for its candidate use cases, so the caller gets the candidate list rather than the file contents.
Release does not invoke iru-explore itself — it reads the Project type: and
Repository host: lines from an iru-explore report already produced earlier in the same conversation (or falls
back to inspecting the repository’s manifests directly) to pick which iru-<key>-bump-version skill and git-host
tooling to use.
|
Related agents
-
The built-in
Exploreagent (see Agents) — Step 4 uses it for the actual codebase search (module structure, abstractions, control flow) instead of manually reading every file.
Source
SKILL.md on GitHub — the file this page was generated from.