GU

guidewire-local-dev-loop

Optimize Guidewire development loops by utilizing hot-reload configurations and efficient debugging techniques.

Install

mkdir -p .claude/skills/guidewire-local-dev-loop && curl -L -o skill.zip "https://agentskills.codes/api/skills/download/7949" && unzip -o skill.zip -d .claude/skills/guidewire-local-dev-loop && rm skill.zip

Installs to .claude/skills/guidewire-local-dev-loop

Activation

This is the description your AI agent reads to decide when to run this skill — the better it matches your request, the more reliably it fires.

Iterate on Gosu rules and configuration without paying the full 5–15 minute runServer rebuild every time. Use when standing up Guidewire Studio against a local InsuranceSuite instance, attaching an IntelliJ remote debugger to runServer, distinguishing changes that hot-reload from changes that force restart, or building a GUnit-driven TDD cycle for rule logic. Trigger with "guidewire studio", "gosu hot reload", "gosu debugger", "gunit", "guidewire runServer".
462 chars✓ has a “when” triggerlonger than Claude Code's old 250-char listing cap (fine on current versions)
Advanced

Key capabilities

  • Configure local InsuranceSuite runServer instances
  • Attach IntelliJ remote debuggers to runServer
  • Distinguish between hot-reloadable and restart-required changes
  • Execute GUnit tests for rule logic
  • Load per-session sample data

How it works

The skill optimizes the development loop by identifying which code changes support hot-reloading and providing commands to manage the server and debugger.

Inputs & outputs

You give it
Gosu rule edits and configuration changes
You get back
An updated local development environment with verified logic

When to use guidewire-local-dev-loop

  • Setting up Guidewire Studio local dev
  • Configuring Gosu hot-reload
  • Attaching IntelliJ debuggers to runServer
  • Optimizing GUnit testing cycles
  • Troubleshooting stale code issues

About this skill

Guidewire Local Dev Loop

Overview

Run a local InsuranceSuite instance and iterate on Gosu rule logic in seconds, not minutes. The single biggest productivity killer in Guidewire development is paying the 5–15 minute gradle runServer cold-start cost on every change because the developer does not know which edits hot-reload and which force a restart.

Three production problems this skill prevents:

  1. Restart cascade — developer changes a Gosu rule, restarts runServer, waits 8 minutes, finds the rule was wrong, repeats. A full day disappears in restarts.
  2. Silent stale code — Studio claims it hot-reloaded a class but the running JVM is still executing the old bytecode (common when interfaces change). Tests pass against stale code.
  3. GUnit drift — unit tests for Gosu rules diverge from the rules themselves because the cycle to run a single test through Studio is too slow; developers stop writing them.

Prerequisites

  • JDK 17 (for Cloud release 202503+)
  • Guidewire Studio installed (IntelliJ-based, distributed by Guidewire)
  • Local InsuranceSuite configuration zone (PolicyCenter, ClaimCenter, or BillingCenter)
  • ≥16 GB RAM on the dev machine — runServer + Studio + the JVM debug agent need headroom
  • Sample data loader configured for the chosen product (e.g., PersonalAuto for PC)

Instructions

Build the inner loop in this order. Every step targets one of the three productivity killers above.

1. Start runServer once, keep it warm

Cold start takes 5–15 minutes; treat it as a session investment.

# Start in dev mode with debug agent on 8088, leaves the server attached to the terminal
./gradlew runServer -Pdebug=true -PdebugPort=8088 -Dgw.servermode=dev

gw.servermode=dev enables the hot-reload paths inside the JVM. debugPort=8088 exposes the JDWP debug agent — attach IntelliJ to it once and leave it. Restart only when the what hot-reloads table below says you must.

2. What hot-reloads, what does not

Memorize this table — it determines whether the next edit costs 0 seconds or 8 minutes.

Change typeHot-reload?Action
Gosu method body in an existing classyessave in Studio; runServer detects via Reload Plugin
Gosu rule (entity, validation, UW) bodyyessave; rule fires on next entity event
New Gosu class added to an existing packageyessave; class is picked up on first reference
Gosu interface signature changenorestart runServer (binary-incompatible class load)
New Gosu plugin registerednorestart runServer (plugin registry is built once at boot)
PCF (Page Configuration Format) layout edityessave; refresh the browser
New PCF page added to the navigationpartialrestart usually; Reload Plugin sometimes works in dev mode
Database schema change (new column, new entity)norestart with gradle dropAndCreateDatabase runServer
Localization bundleyessave; refresh browser
Messaging destination / App Event pluginnorestart (plugin registry)
config/server.xml or config/plugin/registry/*.xmlnorestart

When in doubt, trust the JVM, not Studio. Open the IntelliJ debugger, set a breakpoint on the changed method, trigger the code path, and confirm the breakpoint hits the new line numbers. Studio's "reloaded" status is informational, not authoritative.

3. Attach the IntelliJ debugger once per session

Run > Edit Configurations > + > Remote JVM Debug
  Host: localhost
  Port: 8088
  Module classpath: <your-config-module>
  Save → run with the bug icon

Once attached, breakpoints survive Gosu hot-reloads. The connection drops only on full runServer restart. Use conditional breakpoints (policy.totalPremium.compareTo(BigDecimal("10000")) > 0) for production-shaped data — never trust toy values.

4. GUnit cycle for rule TDD

Gosu rules are testable without a running server. GUnit tests run in seconds and should drive every non-trivial rule change.

# Run a single GUnit test class
./gradlew test --tests "com.acme.policycenter.rules.UnderwritingIssueRuleTest"

# Run all rule tests in a package, with continuous re-run on change
./gradlew test --tests "com.acme.policycenter.rules.*" --continuous

--continuous reruns the matching tests every time a file changes. Pair with the rule under test in a split editor — feedback loop drops to <5 seconds per save.

5. Sample data isolation per session

Every developer needs a deterministic fixture set, not whatever junk is in the shared dev database. Load a per-session sample at runServer start:

# Load the standard sample, then a project-specific overlay
./gradlew loadSampleData -PsampleData=default -PsampleData=acme-uat-fixtures runServer

Project-specific sample sets live in modules/configuration/test/data/ and are checked in. Treat the dev database as ephemeral — never store work-in-progress data only in it; it dies on the next dropAndCreateDatabase.

Output

A working local dev loop ships with all of the following:

  • gradle runServer running in dev mode with debugPort=8088 exposed; remote-debug connection attached from IntelliJ.
  • The hot-reload-vs-restart table internalized and applied — at least 80% of edits cost zero restart time.
  • A gradle test --continuous watcher running in a side terminal for GUnit-driven TDD on the current rule.
  • Sample data loaded from a checked-in fixture set, reproducible across team members.
  • A breakpoint validation habit: every non-trivial rule change is confirmed hot-reloaded by hitting a breakpoint in the new line, not by trusting Studio's reload indicator.

Examples

Example 1 — Pure rule edit, zero restart

1. Edit rule body in modules/configuration/gsrc/.../UnderwritingIssueRules.gs
2. Save (Ctrl-S)
3. Trigger the rule (issue a quote in the running PC instance)
4. Breakpoint hits the new line numbers; rule fires with new logic
5. Total time from save to confirmation: <10 seconds

Example 2 — Interface change, controlled restart

1. Modify interface in modules/configuration/gsrc/.../IPolicyCalculator.gs
2. Recognize this is in the no-hot-reload row of the table
3. Stop runServer (Ctrl-C); start ./gradlew runServer -Pdebug=true -PdebugPort=8088
4. Wait ~8 minutes; reattach debugger
5. Resume work — accept the cost rather than chasing phantom bugs from stale bytecode

Example 3 — TDD cycle on a new validation rule

# Terminal 1: continuous test runner
./gradlew test --tests "com.acme.policycenter.validation.HighValueAccountValidatorTest" --continuous

# Editor: write the failing test first, watch it fail in <5s
# Implement the rule, watch the test pass in <5s
# Commit when green; do not run the full server until the rule is locked

Error Handling

SymptomCauseSolution
Code change "saved" but breakpoint fires on old line numbershot-reload silently failed (interface change, plugin registry edit)restart runServer; do not chase phantom bugs
gradle runServer hangs at Starting server for >20 minfull database rebuild from a recent schema changecheck logs in logs/PolicyCenter.log; if schema migration is running, wait it out; if hung, dropAndCreateDatabase
GUnit test passes locally, fails in CIdev database carries stale data the test depends ontests must self-fixture (@Before loads needed entities); never trust ambient sample data
IntelliJ debugger drops every few minutesrunServer crashed and auto-restarted under a launchercheck logs/PolicyCenter.log for OOM; raise -Xmx in gradle.properties
Hot reload works on Day 1, stops working after a git pullmerged change touched the plugin registry without your local picking it uprestart; rebase pulls do not always invalidate the plugin cache
ClassCastException on a class you just editedbinary-incompatible change to a non-interface class (e.g., changed a public field type)restart; field-type changes are interface-equivalent for the JVM
Breakpoint set in Gosu, never hitsthe rule path is not actually exercised by the test actionverify in logs/PolicyCenter.log that the rule fired; common cause is rule conditions filtering out the test data
Studio shows red error markers everywhere after pulling maindependency cache stale./gradlew clean compileGosu (don't clean the whole project — it nukes runServer's database)

For deeper coverage (containerized dev environments, multi-developer shared servers, plugin debug logging, custom datasource hooks), see implementation guide and API reference.

See Also

  • guidewire-install-auth — once your local runServer integrates outbound to a Cloud tenant, auth layer applies the same as production
  • guidewire-sdk-patterns — when local code calls Cloud API, the same client patterns apply
  • guidewire-ci-cd-pipeline — promotion of locally-developed config through GCC slots; GUnit gates run there too
  • guidewire-core-workflow-a — PolicyCenter workflows that local dev cycles target

Resources

When not to use it

  • When modifying plugin registries or server XML files
  • When performing database schema changes

Prerequisites

JDK 17Guidewire StudioLocal InsuranceSuite configuration zone16 GB RAM

Limitations

  • Interface signature changes force server restarts

How it compares

It replaces the standard 5-15 minute cold-start rebuild cycle with targeted hot-reloading and GUnit testing workflows.

Compared to similar skills

guidewire-local-dev-loop side by side with the closest alternatives in the catalog.

SkillInstallsUpdatedSafetyDifficulty
guidewire-local-dev-loop (this skill)027dReviewAdvanced
python-testing-patterns772moReviewIntermediate
chrome-devtools417moReviewIntermediate
unity-mcp-orchestrator174moNo flagsIntermediate

Try saying

Example prompts that trigger this skill in your AI assistant.

More by jeremylongshore

View all by jeremylongshore

analyzing-logs

jeremylongshore

Analyze application logs to detect performance issues, identify error patterns, and improve stability by extracting key insights.

14123

ollama-setup

jeremylongshore

Configure auto-configure Ollama when user needs local LLM deployment, free AI alternatives, or wants to eliminate hosted API costs. Trigger phrases: "install ollama", "local AI", "free LLM", "self-hosted AI", "replace OpenAI", "no API costs". Use when appropriate context detected. Trigger with relevant phrases based on skill purpose.

1167

backtesting-trading-strategies

jeremylongshore

Backtest crypto and traditional trading strategies against historical data. Calculates performance metrics (Sharpe, Sortino, max drawdown), generates equity curves, and optimizes strategy parameters. Use when user wants to test a trading strategy, validate signals, or compare approaches. Trigger with phrases like "backtest strategy", "test trading strategy", "historical performance", "simulate trades", "optimize parameters", or "validate signals".

1071

generating-database-seed-data

jeremylongshore

Process this skill enables AI assistant to generate realistic test data and database seed scripts for development and testing environments. it uses faker libraries to create realistic data, maintains relational integrity, and allows configurable data volumes. u... Use when working with databases or data models. Trigger with phrases like 'database', 'query', or 'schema'.

1033

cursor-codebase-indexing

jeremylongshore

Execute set up and optimize Cursor codebase indexing. Triggers on "cursor index setup", "codebase indexing", "index codebase", "cursor semantic search". Use when working with cursor codebase indexing functionality. Trigger with phrases like "cursor codebase indexing", "cursor indexing", "cursor".

885

testing-mobile-apps

jeremylongshore

Execute mobile app testing on iOS and Android devices/simulators. Use when performing specialized testing. Trigger with phrases like "test mobile app", "run iOS tests", or "validate Android functionality".

810

You might also like

python-testing-patterns

wshobson

Implement comprehensive testing strategies with pytest, fixtures, mocking, and test-driven development. Use when writing Python tests, setting up test suites, or implementing testing best practices.

77204

chrome-devtools

mrgoonie

Browser automation, debugging, and performance analysis using Puppeteer CLI scripts. Use for automating browsers, taking screenshots, analyzing performance, monitoring network traffic, web scraping, form automation, and JavaScript debugging.

41157

unity-mcp-orchestrator

CoplayDev

Orchestrate Unity Editor via MCP (Model Context Protocol) tools and resources. Use when working with Unity projects through MCP for Unity - creating/modifying GameObjects, editing scripts, managing scenes, running tests, or any Unity Editor automation. Provides best practices, tool schemas, and workflow patterns for effective Unity-MCP integration.

1795

bats

OleksandrKucherenko

Bash Automated Testing System (BATS) for TDD-style testing of shell scripts. Use when: (1) Writing unit or integration tests for Bash scripts, (2) Testing CLI tools or shell functions, (3) Setting up test infrastructure with setup/teardown hooks, (4) Mocking external commands (curl, git, docker), (5) Generating JUnit reports for CI/CD, (6) Debugging test failures or flaky tests, (7) Implementing test-driven development for shell scripts.

991

nestjs-expert

davila7

Nest.js framework expert specializing in module architecture, dependency injection, middleware, guards, interceptors, testing with Jest/Supertest, TypeORM/Mongoose integration, and Passport.js authentication. Use PROACTIVELY for any Nest.js application issues including architecture decisions, testing strategies, performance optimization, or debugging complex dependency injection problems. If a specialized expert is a better fit, I will recommend switching and stop.

3758

browser-daemon

noiv

Persistent browser automation via Playwright daemon. Keep a browser window open and send it commands (navigate, execute JS, inspect console). Perfect for interactive debugging, development, and testing web applications. Use when you need to interact with a browser repeatedly without opening/closing it.

587

Search skills

Search the agent skills registry