Common workflows
| This documentation was generated with the assistance of AI. Please report any inaccuracies. |
Common workflows on the top-level page gives a one-diagram-each overview of how this catalog’s skills compose for a handful of recurring jobs. This page goes deeper on the four a person actually runs most often — starting work on a ticket, filing a ticket before that work begins, bootstrapping a repository, and cutting a release — with a fuller diagram and, for the first one, a breakdown of what each step in it actually does.
Typical development cycle, starting from a ticket
This is the main workflow for day-to-day work in this catalog. Whenever there’s a tracked ticket — a GitHub
issue or a Jira ticket — to pick up, this is the path to reach for: /iru-issue <ticket-id> runs it end to end, from
"just filed" to "pull request open for review." Each stage also works standalone (/iru-explore, /iru-plan, /iru-code,
/iru-pr-description, /iru-pr-review), so the same flow applies whether one command drives all of it or a person runs
each stage themselves.
The two hexagons are manual gates, not automated steps: nothing moves past either one without the user’s own
judgment call. Between "Prepare implementation plan" and "Code implementation," the user reads
implementation_plan.md and either lets it proceed or asks for changes — this is the cheapest point to redirect
the work, before any code is written. After "Create and review Pull Request," the user reviews the actual diff
and the automated review comments before merging — the PR is always opened as a draft, so nothing ships without
that final look.
| Diagram block | Skill(s) | What happens |
|---|---|---|
Explore issue + codebase |
|
|
Prepare implementation plan |
|
|
User reviews the implementation plan |
— (manual gate) |
|
Code implementation |
|
|
Create and review Pull Request |
|
|
User reviews the final result |
— (manual gate) |
|
Filing a ticket before work begins
The cycle above needs a ticket (or at least a free-form description) to start from. That ticket doesn’t have to
be written by hand: iru-create-github-issue and
iru-create-jira-ticket let AI assist in producing one, so it’s ready to feed
straight into the typical development cycle above.
Either skill runs iru-explore first — a previous analysis of the current codebase — then asks the user the same
handful of questions every time: what the purpose of the task is, what additional context exists (linked URLs,
attached files, related tickets, and — Jira only — an optional epic), and the task’s due date and importance.
From that, it classifies the ticket (bug vs. feature/enhancement, or the matching Jira issue type), drafts a
structured title and body — including an agent-assessed estimated difficulty — and matches it against the
repository’s actual label set or Jira project configuration rather than inventing one. The draft is always shown
for confirmation before anything is filed. See Creating GitHub issues and Jira tickets for the full breakdown of
what’s asked, how the draft is structured, and every skill involved.
For a larger or more demanding issue there is a detailed, spec-style path (GitHub only):
iru-draft-github-issue interviews the user, writes a complete functional
or documentation draft, runs iru-review-github-issue on it in a loop until
no gaps remain, and offers iru-split-github-issue when the issue is too
large (sub-issues ordered by dependency, tracked by a milestone). iru-create-github-issue stays the quick path. See
Detailed, spec-style issues.
Tickets can still be created manually — directly in GitHub or Jira, with no AI involvement at all — and nothing
in the typical development cycle requires going through
these skills first; /iru-issue and /iru-plan work the same way against a hand-written ticket, or even no ticket at
all. What AI assist adds is consistency and grounding: every draft is checked against the real codebase and asks
for the same structured information, rather than depending on whoever’s filing it to remember what a
well-formed ticket needs.
Bootstrapping a repository
This workflow is for standing up a repository’s scaffold, docs, gitignore, CI/CD, changelog, and README in one
pass, rather than writing each by hand or running five to six skills separately.
iru-setup-repository is the front door for every stack this catalog
supports — it works the same way whether the repository is brand new or already has code in it.
On a brand-new, empty repository
/iru-setup-repository finds nothing to detect, so it asks the project type itself, over up to six short
AskUserQuestion rounds rather than one long list. Each round offers three options plus a "Something in
the next group" escape hatch that moves on to the next round: JVM services & libraries (Java library, Spring Boot
service, Quarkus service), Web & Node (TypeScript/npm library, web app, NestJS backend service), PHP (Laravel
application, WordPress plugin or block theme, PrestaShop module), Python (FastAPI service, Django project), Mobile & Apple (Android, Apple,
cross-platform mobile app), and Desktop & command line (macOS desktop app, Windows desktop app, command-line tool);
the last round’s escape hatch is
"None of these", which ends the run with a plain "no orchestrator for this stack" report. An option that bundles several types gets one short follow-up right away —
web app → React / Next.js / Angular, WordPress → plugin / block theme, Android → library / app, Apple → Swift
library / Apple app, cross-platform → React Native / Kotlin Multiplatform / Ionic, command-line tool → Rust / Go /
Swift / C# .NET — while Spring Boot and Quarkus get none here: their
language (Java or Kotlin), build tool (Maven or Gradle), Quarkus layout, and Hilla frontend are asked by their own
orchestrators, and the desktop apps' UI framework and MVVM/MVC architecture are asked by
iru-setup-macos-repository/iru-setup-windows-repository, and a command-line tool’s terminal UI and package channels
by iru-setup-cli-repository. A plain .NET, Rust or Go library or service is recognised by iru-explore but never
offered here, because the catalog has no bootstrap orchestrator for it (Windows desktop apps and command-line tools
are the exceptions). Once the type is known, it announces that it is setting the repository up from
scratch, then asks only the inputs the stacks genuinely share, exactly once: open-source; visibility
(public/private/internal, detected with gh repo view when the repository already has a GitHub remote,
otherwise asked); ci — whether to generate GitHub Actions workflows at all; sonar — whether SonarCloud/SonarQube
receives CI analysis and coverage reports (+ its organization/project-key/host details); ci-tests — unit only or
the full suite (integration / instrumentation / e2e); pages — whether docs are deployed to GitHub Pages; and
publish (libraries) or distribution (apps) — plus the flavor-specific ones the chosen type needs (platforms for Swift/Apple,
framework for Ionic, toolchain (expo or metro) and — for Expo only — native-builds for React Native).
Kotlin Multiplatform’s UI approach (ui: compose for Compose Multiplatform shared UI, ui: native for Jetpack
Compose + SwiftUI over shared logic) is asked by its own orchestrator. License and developer identity are never asked by the
front door; each stack orchestrator asks its own.
Visibility matters because the CI choices cost differently (per GitHub’s current pricing — double-check your plan):
standard Actions runners and SonarCloud are free for public repositories, while a private repository spends its
plan’s included Actions minutes (2,000/month on GitHub Free, with macOS minutes counting roughly 10×), needs a paid
SonarCloud plan, and can only use GitHub Pages on Pro/Team/Enterprise Cloud — where the published site is still
public unless the organization is on Enterprise Cloud with private Pages access control. So for a public
repository the front door recommends ci: yes, ci-tests: full, and defaults pages: yes; for a private one it
recommends ci-tests: unit and pages: no (the docs are still built and uploaded as a workflow artifact), and
recommends sonar: cloud only for a public, open-source repository. ci: no skips the workflows step entirely —
including the shared Dependabot/dependency-review/CodeQL/OSV-Scanner/gitleaks security block — and the stack’s
-github-workflows skill can be re-run later to add them. It then delegates to that stack’s own orchestrator (e.g.
Setup TypeScript Repository, Setup Android Repository) via the
iru-isolated-skill-executor agent, so its full multi-step transcript stays out of the front door’s own context.
A -repository orchestrator runs its fixed six-step chain (scaffold → Antora → gitignore → CI/CD workflows →
changelog → README), while iru-setup-java-springboot runs its own manifest-driven chain (interview →
springboot-stack.yml → the iru-setup-java-springboot- sub-skills → iru-update-java-springboot-documentation
→ gitignore/README/changelog). Either way it returns a single consolidated report, including one combined
required-secrets table covering every
workflow it generated (Sonar tokens, publishing credentials, signing secrets, …) instead of a separate table per
sub-skill. What to do next is manual and outside any skill’s reach: create those secrets in the repository’s
settings, set up the SonarCloud/self-hosted SonarQube project and any package-registry account the publish/
distribution choice implies, review the generated files, and commit.
On an existing repository
/iru-setup-repository runs iru-explore first and reads back its Project type:
line, so the type question is pre-selected instead of asked — a repository already recognizable as, say,
android-library skips straight to the shared inputs. Before asking them, it announces that it is updating an
existing repository and prints an inventory of the prior setup it found — build manifest, sources, Antora docs,
.gitignore, each workflow file, Dependabot, Sonar config, CHANGELOG.md, README.md, LICENSE — each marked
absent, present, or partial. It then forces mode: existing on the delegation, so no sub-skill assumes a
brand-new repo, but mode: existing never means "update silently": every component skill that finds an artifact
it owns warns and asks what to do with it, explaining the consequence of each choice —
-
Update (usually recommended) — merge: add what’s missing and correct outdated parts using the skill’s template, keeping everything the skill doesn’t own (custom steps, entries, pages, sections). You review a diff.
-
Keep as is — leave the file untouched; the final report lists every way it disagrees with this run’s choices (e.g. a workflow that still runs a Sonar step after
sonar: none, or still deploys to Pages afterpages: no). -
Replace — regenerate from the template; every customization in that file is lost (recoverable only from git history).
Some components keep their additive nature inside that shape: iru-setup-antora's
Update only fills gaps and never overwrites a page, and iru-setup-changelog's
Update only appends releases missing from CHANGELOG.md. For scripted runs, on-existing: keep|update|replace in
args answers every one of these questions up front. The final report repeats the mode and, per component, the
action actually taken — created, updated, replaced, kept as is, or skipped (ci: no).
Invoking a stack orchestrator directly
Each stack’s orchestrator also runs standalone, useful when the front door’s project-type rounds are unnecessary because the stack is already known:
-
TypeScript/web —
/iru-setup-typescript-repositorycovers seven flavors from one orchestrator; passflavorto skip the question (library,react,angular,react-native,ionic,nestjs,nextjs), e.g./iru-setup-typescript-repositorywithargs: flavor: reactfor a Vite+React web app, orflavor: ionic(plusframework: angularorframework: reactfor Ionic’s own underlying choice).flavor: nestjsscaffolds a NestJS API viairu-setup-nestjs-app(orm/databasepick an optional persistence layer,distribution: internaladds a container image to GHCR);flavor: nextjsscaffolds a Next.js web app viairu-setup-nextjs-web(router: app|pages,output: server|static,e2e: playwright|none). -
Quarkus —
/iru-setup-quarkus-repositorywithargs: language: java|kotlin,build-tool: maven|gradle(Gradle uses the Kotlin DSL), andlayout: single|hexagonal(a single-module service, or a multi-module hexagonal reactor mirroring the Spring Boot module table);iru-setup-quarkus-servicewrites aquarkus-stack.ymlmanifest, scaffolds with the Quarkus Maven plugin using extensions validated against code.quarkus.io, and post-processes quality tooling, JaCoCo, and sample tests at each Quarkus test level. -
PHP —
/iru-setup-php-repositorywithargs: flavor: laravel(Pest, Pint, Larastan),flavor: wordpress-pluginorflavor: wordpress-theme(block theme; WPCS, PHPStan WordPress, Brain Monkey unit tests pluswp-envintegration tests), orflavor: prestashop-module(PrestaShop 8.x/9.x,prestashop/php-dev-tools);php-versionsets the supported floor anddistributiondecides whether a WordPress.org/PrestaShop Addons package or a Laravel container image is produced. -
Python —
/iru-setup-python-repositorywithargs: flavor: fastapi(iru-setup-python-fastapi;database/ormpick an optional SQLModel/SQLAlchemy persistence layer with Alembic) orflavor: django(iru-setup-python-django;apipicks DRF or Django Ninja), both with pytest, Ruff, and mypy;python-versionsets the supported floor anddistributiondecides whether a container image is pushed to GHCR. A plain Python package (no FastAPI/Django) has no scaffold, but theiru-python-*gate skills still apply to it. -
Android —
/iru-setup-android-repositorywithargs: flavor: library(alib/module plus a Composeapp/sample, following the Android reference-repository conventions) orflavor: app(a singleapp/module). -
Kotlin Multiplatform —
/iru-setup-kmp-repository(scaffold viairu-setup-kmp-app): ashared/KMP module (Android + iOS targets), anandroidApp/host and an XcodeGen-generated SwiftUIiosApp/, withui: composeorui: native, detekt/ktlint/Android Lint/SwiftLint, Kover coverage on the JVM/Android side, Dokka, and CI that splits Linux (shared + Android) from macOS (iOS) jobs. -
React Native —
/iru-setup-typescript-repositorywithargs: flavor: react-nativeandtoolchain: expo(Expo framework: Expo Router, EAS or local prebuild builds) ortoolchain: metro(bare React Native CLI: committedandroid//ios/projects, CocoaPods, Gradle/Xcode CI jobs and store release). -
Swift/Apple —
/iru-setup-swift-repositorywithargs: flavor: libraryfor a SwiftPM package, orflavor: appfor an XcodeGen/Tuist-generated native iOS/iPadOS/macOS/watchOS/visionOS app — SwiftUI or, for the iOS/iPadOS target, programmatic UIKit (ui), witharchitecture: mvvm|mvcover a UI-freePackages/Core(addplatformsto scope the targets whenapp). -
macOS desktop —
/iru-setup-macos-repository(scaffold viairu-setup-macos-app): a macOS-only XcodeGen project withui: swiftui(scenes, Settings, menu commands) orui: appkit(programmaticNSWindowController/NSViewController),architecture: mvvm(SwiftUI, or AppKit with Observation tracking) ormvc(AppKit), a UI-freePackages/Corepackage carrying the 80% coverage bar, the App Sandbox and hardened runtime, and CI/CD that tests on a macOS runner and releases a Developer ID–signed, notarized, stapled DMG (distribution: internal) or an App Store Connect upload (distribution: store). -
Windows desktop —
/iru-setup-windows-repository(scaffold viairu-setup-windows-app): a .NET 10 solution withui: wpf,winui(WinUI 3 / Windows App SDK) orwinforms,architecture: mvvm(CommunityToolkit.Mvvm; the only option for WPF/WinUI) ormvc(Windows Forms), a UI-freenet10.0Core project carrying the 80% coverage bar (testable on Linux/macOS too), MSTest + coverlet, StyleCop + .NET analyzers, DocFX, optional FlaUI UI tests, and CI/CD that keeps Core tests on Linux, builds/packages on a Windows runner, and releases zips + a signed MSIX
.appinstaller(optionally WinGet) or a Microsoft Store submission. -
Command-line tool —
/iru-setup-cli-repository(scaffold viairu-setup-rust-cli,iru-setup-go-cli,iru-setup-swift-clioriru-setup-dotnet-cli, workflows viairu-setup-cli-github-workflows): one native binary inlanguage: rust(clap),go(Cobra),swift(swift-argument-parser) ordotnet(System.CommandLine, Native AOT), withui: tuiadding a TTY-gated full-screenbrowsecommand (Ratatui, Bubble Tea, or a .NET terminal UI — not offered for Swift). Every scaffold follows the agent-friendly contract of the author’s Building CLIs for AI Agents guide: data on stdout and messages on stderr, exit codes 0–7 plus 130/143,--format text|json|jsonlwith a JSON error envelope, colour only on a terminal (NO_COLOR), no prompts without one (--no-input,--yes),--dry-runfor mutations, and generatedcompletion,schema, man page and CLI reference. Logic lives in a library unit carrying the 80% coverage bar, next to end-to-end tests of the real binary; CI runs on Linux with macOS/Windows legs on thecross-os-cischedule, and releases ship per-target archives withSHA256SUMSand build-provenance attestations (distribution: internal), plus crates.io / Homebrew / Scoop / WinGet / NuGet-tool channels (store). -
Spring Boot + Hilla —
/iru-setup-java-springbootitself already asks whether the service has a frontend; passargs: frontend: hillato skip that question and haveiru-setup-java-springboot-hillascaffold the Vaadin/Hilla React frontend into thebootmodule right after the API layer is generated. -
Kotlin Spring Boot — the same
/iru-setup-java-springbootchain withargs: language: kotlin(and optionallybuild-tool: gradlefor a Kotlin DSL build with a version catalog andbuild-logic/convention plugins; Maven remains the default): the module tree is unchanged, while detekt/ktlint and Dokka replace Checkstyle/PMD/SpotBugs and Javadoc. Java services stay Maven-only.
Generating a release
This workflow is used once a batch of tasks has already been completed, reviewed, and tested — not mid-feature.
iru-release converts the repository’s current development pre-release version
into a final, tagged release: it must be run from develop (this catalog follows gitflow) and stops immediately
if it isn’t. It is not Maven-only — the version-bump step itself is delegated to whichever
iru-<key>-bump-version skill (guides/extending-the-catalog.adoc#_release_generation_for_other_ecosystems
covers the registry) matches the project’s detected ecosystem (java — Java or Kotlin, Maven or Gradle —,
typescript, react-native, android, kmp, swift, php, python, dotnet, rust, go today), so the same /iru-release flow applies whether the version lives in
pom.xml, a Gradle build or gradle.properties, package.json (plus a React Native app’s app.json or native
versionName/MARKETING_VERSION, or a KMP app’s iosApp xcconfig), a Gradle version catalog, a Swift package
manifest, or a PHP project’s own version location (Laravel config/app.php, a WordPress plugin/theme header, a
PrestaShop module class), a Python project’s pyproject.toml (PEP 440 .devN pre-releases), a .NET
Directory.Build.props <Version> (-dev pre-releases, mirrored into a Windows app’s four-part MSIX version), a
Rust Cargo.toml version, a Go tool’s internal/version/version.go literal, or a Swift command-line tool’s
Version.swift (all -dev pre-releases).
Every file that echoes the version number — the ecosystem’s own version file (via iru-<key>-bump-version),
README.md, docs/antora.yml, and any Antora page with a dependency snippet — is updated in the same pass, so
nothing is left pointing at the previous release once the PR merges.
See also
-
Common workflows on the top-level page — the shorter, one-diagram version of these same workflows, alongside the catalog’s other supported flows (updating an existing repository after unrelated changes).
-
Creating GitHub issues and Jira tickets — a full breakdown of the "Filing a ticket" workflow above: every piece of information asked for, how the drafted ticket is structured, and every skill involved.
-
Extending the skills and agents catalog — how the repository-bootstrap and release-generation pipelines used above are built to be extended with a new stack or ecosystem.
-
Issue-to-PR Development Cycle and Ticket Intake — the purpose groups these workflows draw their skills from.
-
Issue, Plan, Code — detail pages for the typical development cycle’s own skills.
-
Setup Repository — detail page for the repository-bootstrap front door.
-
Rolling deployments — staged blue/green, canary and linear deployments for generated Spring Boot services, and the
promote.ymlworkflow that advances them. -
Release — detail page for the release workflow.