Best for
- A Word report, technical note, or user request asks for a similar study on
- A fire case can heat a liquid-filled segment isolated by closed valves or PBB.
- Thermal expansion may raise pressure above pipe, flange, gasket, or relief limits.
equinor/neqsim/.github/skills/neqsim-trapped-liquid-fire-rupture/SKILL.md
Fire rupture study workflow for blocked-in liquid-filled pipe segments and blowdown pipe fire heat-up / time-to-rupture strain-rate screening. USE WHEN: a task asks for trapped liquid, blocked-in liquid, thermal expansion rupture, fire exposure without relief, PFP demand, flange/pipe rupture screening, supplied blowdown pressure profile, pipe wall heat-up, strain-rate rupture time, or generating a Word/HTML safety study from P&IDs, line lists, piping specifications, material certificates, and fi
Decision brief
This skill coordinates two related fire-rupture workflows:
In this controlled same-task single run, enabling neqsim-trapped-liquid-fire-rupture changed the output from 2259 non-whitespace characters and 11 headings to 2400 characters and 11 headings. Matches among 8 signals extracted from the pinned source changed from 1 to 2. Both actual outputs are shown; this is a structural observation, not a quality score or a universal performance claim.
Produce a decision-ready research brief for a small SaaS team evaluating retrieval-augmented generation. State assumptions, evidence needs, tradeoffs, and next actions. The deliverable must specifically reflect this user intent: Fire rupture study workflow for blocked-in liquid-filled pipe segments and blowdown pipe fire heat-up / time-to-rupture strain-rate screening. USE WHEN: a task asks for trapped liquid, blocked-in liquid, thermal expansion rupture, fire exposure without relief, PFP demand, flange/pipe rupture screening, supplied blowdown pressure profile, pipe wall heat-up, strain-rate rupture time, or generating a Word/HTML safety study from P&IDs, line lists, piping specifications, material certificates, and fi

Baseline: 2259 non-whitespace characters, 11 headings, and 48 list items.

With Skill: 2400 non-whitespace characters, 11 headings, and 44 list items.
| Observation | Without Skill | With Skill |
|---|---|---|
| Source-signal coverage | 1/8: rupture | 2/8: rupture, evidence |
| Output structure | 2259 chars · 11 headings · 48 list items · 0 code blocks | 2400 chars · 11 headings · 44 list items · 0 code blocks |
| Verification and caution signals | 1 verification signals · 11 risk/limitation signals | 3 verification signals · 5 risk/limitation signals |
Use the neqsim-trapped-liquid-fire-rupture Skill pinned at 564a1d2cf927 for my task. Follow its source-specific constraints around `neqsim-trapped-liquid-fire-rupture`, `rupture`, `study`, `together`, then return the finished deliverable with explicit assumptions, verification, failure conditions, and limits. Do not treat the Skill text as a factual source or claim that a single demonstration proves universal performance.
Compatibility matrix
| Platform | Status | Evidence | What to check |
|---|---|---|---|
| Codex | Not declared | No explicit evidence | Portability before use |
| Claude Code | Not declared | No explicit evidence | Portability before use |
| Cursor | Not declared | No explicit evidence | Portability before use |
| Gemini CLI | Not declared | No explicit evidence | Portability before use |
Installation
The source command is displayed only when detected. A safe inspection prompt is always available so your agent can explain every action before execution.
npx skills add https://github.com/equinor/neqsim --skill ".github/skills/neqsim-trapped-liquid-fire-rupture"Inspect the Agent Skill "neqsim-trapped-liquid-fire-rupture" from https://github.com/equinor/neqsim/blob/a2f7a2d8e892a1e7a57fea927c66d865194aea92/.github/skills/neqsim-trapped-liquid-fire-rupture/SKILL.md at commit a2f7a2d8e892a1e7a57fea927c66d865194aea92. List every install step, command, network request, credential, file read/write, external action, and rollback step. Explain whether it fits my task. Do not install or execute anything until I approve.
Workflow
A Word report, technical note, or user request asks for a similar study on
Document-retrieval tools for P&IDs, line lists, piping specs, material
Before running the calculation, search the task references folder and any configured document backend for:
Technical document readers should return a block like this to the solver:
When pipe data comes from source drawings and piping-specification rows, normalize it into a source-traceable package before NeqSim calculation:
Permission review
No configured static risk pattern was detected
This is not proof of safety. Runtime behavior, indirect dependencies, and hidden external systems are outside the static scan.
Evidence record
| Signal | Value | Evidence type | Meaning |
|---|---|---|---|
| Quality score | 98/100 | Computed | Documentation, specificity, maintenance, and trust rules |
| Repository stars | 145 | Source | Repository attention, not individual Skill quality |
| Compatibility | 0 platforms | Source | Declared in the catalog source record |
| Usage guide | tested outcome page | Tested | Generated or reviewed according to the visible evidence level |
Pinned source
This skill coordinates two related fire-rupture workflows:
For both workflows, gather evidence, preserve assumptions and gaps, run the appropriate NeqSim safety.rupture calculation, hand off any rupture source term, and produce a professional report output.
For source-document-driven blowdown pipe-fire studies, use the governed handoff
layer instead of calling the low-level solver directly: build
SafetyEvidenceReference entries, assemble a PipeFireRuptureDataSource, run
PipeFireRuptureStudyRunner, and report the returned
PipeFireRuptureStudyHandoff. This preserves calculation readiness, standards
readiness, deterministic uncertainty cases, and the post-rupture source-term
handoff in one JSON-safe package.
When the blowdown pressure profile has not yet been generated, first use the
dynamic flare/blowdown layer from neqsim-depressurization-mdmt: assemble
LineEquipmentListEvidence and DynamicBlowdownFlareStudyDataSource, run
DynamicBlowdownFlareStudyRunner, and use the returned source pressure profiles
and dynamic_blowdown_flare_load_handoff.v1 as the governed basis for the
pipe-fire rupture profile and flare/consequence handoff.
Use the workflow generically. Do not encode operator-specific criteria in public examples. If a private task has project-specific acceptance criteria, keep them inside the task folder and cite the private basis only in that task deliverable.
neqsim-technical-document-reading for structured extraction from Word, PDF,
Excel, P&ID images, line lists, and material certificates.neqsim-process-safety for barrier/PFP demand and risk register context.neqsim-relief-flare-network when a thermal relief path or PSV/flare load is
part of the mitigation.neqsim-consequence-analysis when the rupture source term must be carried into
dispersion, fire, explosion, or QRA calculations.neqsim-professional-reporting for the final evidence-based report.Before running the calculation, search the task references folder and any configured document backend for:
| Evidence | Purpose in calculation |
|---|---|
| P&ID / isometric | Isolation boundary, valves, vents, drains, relief paths, line numbers |
| Line list / route table | NPS, internal diameter, wall thickness, length, design pressure/temperature |
| Piping specification | Material class, corrosion allowance, flange class, gasket/bolt family |
| Material certificate or material class sheet | SMYS, SMTS, grade, temperature limits, toughness notes |
| Flange/bolt/gasket data | Pressure-temperature rating and leakage/rupture limitations |
| Fire-zone / fire-study document | Exposed area, heat flux, pool/jet-fire basis, fire duration |
| PFP requirement or inspection record | Required endurance and actual protection condition |
| Relief/thermal relief/blowdown basis | Relief availability, set pressure, discharge path, creditability |
| Blowdown pressure profile | Time/pressure table, units, absolute/gauge convention, source calculation |
| Pipe fire material curve | Temperature-dependent UTS, strain effect, rupture strain limit, Sellars-Tegart constants |
| Pipe fluid basis | Fluid density, heat capacity, gas molecular weight, gas/liquid release basis |
| Design basis / technical requirements | Acceptance criteria, required margins, standards, reporting basis |
| Consequence or layout study | Source-term destination, escalation, radiation, dispersion context |
If any item is missing, do not invent it. Use a clearly labelled screening default only when the result can still support a preliminary decision, and put the gap in the assumptions/gaps register.
Technical document readers should return a block like this to the solver:
{
"study_type": "trapped_liquid_fire_rupture",
"segments": [
{
"segment_id": "TL-001",
"line_numbers": ["..."],
"isolation_boundary": {"upstream": "XV-...", "downstream": "XV-..."},
"fluid": {"description": "...", "composition_source": "..."},
"operating_pressure_bara": {"value": 10.0, "source": "..."},
"operating_temperature_C": {"value": 25.0, "source": "..."},
"pipe_internal_diameter_m": {"value": 0.10, "source": "..."},
"wall_thickness_m": {"value": 0.003, "source": "..."},
"exposed_length_m": {"value": 10.0, "source": "..."},
"material_grade": {"value": "API 5L X52", "source": "..."},
"flange_class": {"value": 900, "source": "..."},
"fire_basis": {"type": "api521_pool_fire", "heat_flux_W_m2": null, "source": "..."},
"pfp_requirement_s": {"value": 1800.0, "source": "..."},
"relief": {"available": false, "set_pressure_bara": null, "source": "..."},
"acceptance_criteria": [{"criterion": "...", "source": "..."}],
"evidence_gaps": ["..."]
}
]
}
Every numeric field should preserve original value, original unit, converted SI value, source document, page/sheet, and confidence when available.
For blowdown pipe fire rupture, technical document readers or source-document agents should return a block like this:
{
"study_type": "blowdown_pipe_fire_rupture",
"segment_id": "BD-001",
"pressure_profile": {
"time_unit": "minute",
"pressure_unit": "bara",
"basis": "absolute pressure profile from governed blowdown calculation",
"points": [[0.0, 61.3], [0.083333333, 59.7053]]
},
"pipes": [
{
"pipe_id": "3DD100",
"pipe_class": "DD100",
"nps_in": 3.0,
"outside_diameter_mm": 88.9,
"wall_thickness_mm": 3.7,
"corrosion_allowance_mm": 0.0,
"wall_undertolerance_fraction": 0.125,
"weld_factor": 1.0,
"material": "22Cr duplex",
"fluid_density_kg_m3": 23.75,
"fluid_heat_capacity_J_kgK": 2283.35,
"gas_molecular_weight_kg_kmol": 18.2,
"initial_temperature_C": 20.0,
"exposed_length_m": 1.0,
"source": "reviewed piping specification / workbook input"
}
],
"fire_scenarios": ["Small jet fire 250 kW/m2", "Pool fire 250 kW/m2", "Large jet fire 350 kW/m2"],
"evidence_gaps": []
}
When pipe data comes from source drawings and piping-specification rows, normalize it into a source-traceable package before NeqSim calculation:
{
"schemaVersion": "pipe_fire_rupture_data_source.v1",
"studyId": "BD-001",
"input": {"segmentId": "3DD100", "evidenceReferences": []},
"material": {"materialName": "22Cr duplex"},
"scenario": {"name": "Large jet fire 350 kW/m2"},
"pressureProfile": {"pressureUnit": "bara", "timeUnit": "seconds"},
"pidTopologyEvidence": {
"schemaVersion": "pid_topology_evidence.v1",
"drawingId": "P-ID-001",
"revision": "A",
"simulationReady": false,
"boundaryVerified": false,
"nodes": [],
"edges": [],
"missingTags": []
},
"sourceDocumentEvidence": [],
"pipingSpecificationEvidence": [],
"processEvidence": [],
"fireScenarioEvidence": [],
"sourceDiagramsReviewed": true,
"pidTopologyVerified": false,
"pipingSpecificationRowsReviewed": true,
"materialCertificateReviewed": false,
"blowdownProfileVerified": true,
"fireScenarioReviewed": true,
"standardsReviewed": false,
"humanReviewRequired": true,
"readiness": {"verdict": "SCREENING"}
}
Readiness semantics:
NOT_READY: missing calculation-critical input (input, material, scenario,
or pressure profile). Do not run the calculation.SCREENING: calculation may run, but evidence gaps or unreviewed assumptions
prevent design-grade use.DESIGN_GRADE: controlled source drawing, piping-specification, material, fire, and depressurization evidence
has been reviewed and the package is ready for formal engineering review.Before committing to a full fire-exposure rupture study, BlockedInLiquidExpansionAnalysis
(neqsim.process.util.fire) provides a fast, fire-independent check of pure thermal-expansion
overpressure for a blocked-in liquid segment, per API 521 §4.4.12:
SystemInterface oil = new SystemSrkEos(298.15, 10.0);
oil.addComponent("n-heptane", 100.0);
oil.setMixingRule("classic");
double[] temperaturesK = {298.15, 308.15, 318.15, 328.15, 333.15};
double[] pressuresPa =
BlockedInLiquidExpansionAnalysis.computeIsochoricPressureProfile(oil, temperaturesK);
// Fast cross-check using the simplified API 521 beta/kappa relation
double beta = BlockedInLiquidExpansionAnalysis.estimateThermalExpansionCoefficient(oil, 1.0);
double kappa = BlockedInLiquidExpansionAnalysis.estimateIsothermalCompressibility(oil, 1.0e5);
double deltaPPa = BlockedInLiquidExpansionAnalysis.simplifiedPressureRise(beta, kappa, 35.0);
Use this when the task only needs a thermal-expansion magnitude (e.g. deciding whether a thermal relief valve is needed) without a fire scenario, material derating, or flange/pipe-stress checks. See docs/safety/blocked_in_liquid_thermal_expansion.md for the full reference.
SystemInterface oil = new SystemSrkEos(298.15, 10.0);
oil.addComponent("n-heptane", 100.0);
oil.setMixingRule("classic");
InventoryResult inventory = new TrappedInventoryCalculator()
.setFluid(oil)
.setOperatingConditions(10.0, "bara", 25.0, "C")
.addPipeSegment("TL-001", 0.10, 10.0, 1.0, null)
.calculate();
TrappedLiquidFireRuptureResult result = TrappedLiquidFireRuptureStudy.builder()
.segmentId("TL-001")
.fluid(oil)
.inventory(inventory)
.pipeGeometry(0.10, "m", 3.0, "mm", 10.0, "m")
.api5lMaterial("X52")
.fireScenario(FireExposureScenario.api521PoolFire(3.4, 1.0))
.flangeClass(900)
.timeControls(1800.0, 2.0)
.build()
.run();
Key classes:
MaterialStrengthCurve: ambient SMYS/SMTS plus temperature derating.FireExposureScenario: API 521 pool fire, fixed heat flux, or radiative fire.TrappedLiquidFireRuptureStudy: transient pressure, wall temperature, pipe stress,
flange rating, vapor-pocket, relief-set, and rupture checks.TrappedLiquidFireRuptureResult: event times, time histories, JSON map, PFP demand,
and source-term handoff.For supplied-pressure-profile blowdown pipe fire rupture:
BlowdownPressureProfile profile = BlowdownPressureProfile.fromMinutesAndBara(
new double[] {0.0, 0.083333333, 0.166666667},
new double[] {61.3, 59.7053, 58.6349});
PipeFireRuptureInput pipe = PipeFireRuptureInput.builder("3DD100")
.pipeClass("DD100")
.nominalDiameterInches(3.0)
.outsideDiameter(88.9, "mm")
.nominalWallThickness(3.7, "mm")
.corrosionAllowance(0.0, "mm")
.wallThicknessUndertoleranceFraction(0.125)
.weldFactor(1.0)
.fluidDensityKgPerM3(23.75)
.fluidHeatCapacityJPerKgK(2283.35)
.gasMolecularWeightKgPerKmol(18.2)
.initialTemperatureC(20.0)
.exposedLength(1.0, "m")
.build();
PipeFireRuptureResult pipeResult = PipeFireRuptureStudy
.builder(pipe, PipeFireRuptureMaterial.fromSpreadsheetMaterialName("22Cr duplex"),
PipeFireRuptureScenario.spreadsheetLargeJetFire(), profile)
.timeStepSeconds(5.0)
.maxTimeSeconds(1800.0)
.build()
.run();
For governed agentic studies, prefer the runner pattern:
SafetyEvidenceReference pipingSpecWall = SafetyEvidenceReference
.builder("PIPING_SPEC", "nominal_wall_thickness_mm")
.documentId("pipe-class=DD100;rev=D")
.valueText("3.7")
.unit("mm")
.status("fetched_joined")
.confidence(0.95)
.build();
PipeFireRuptureInput governedPipe = pipe.toBuilder()
.evidenceReference(pipingSpecWall)
.build();
PipeFireRuptureDataSource dataSource = PipeFireRuptureDataSource.builder("BD-001")
.input(governedPipe)
.material(PipeFireRuptureMaterial.fromSpreadsheetMaterialName("22Cr duplex"))
.scenario(PipeFireRuptureScenario.spreadsheetLargeJetFire())
.pressureProfile(profile)
.addPipingSpecificationEvidence(pipingSpecWall)
.sourceDiagramsReviewed(true)
.pidTopologyVerified(false)
.pipingSpecificationRowsReviewed(true)
.materialCertificateReviewed(false)
.blowdownProfileVerified(true)
.fireScenarioReviewed(true)
.standardsReviewed(false)
.build();
PipeFireRuptureStudyHandoff handoff = PipeFireRuptureStudyRunner.builder()
.timeStepSeconds(5.0)
.maxTimeSeconds(1800.0)
.runUncertainty(true)
.build()
.run(dataSource);
Key pipe-fire classes:
BlowdownPressureProfile: absolute pressure profile with exact tabulated-point lookup, step or linear mode, and barg conversion.PipeFireRuptureInput: one pipe case with geometry, wall allowance, fluid, and exposed-length data.PipeFireRuptureMaterial: workbook-style material curves for 22Cr duplex, SS316, CS235, CS360/API 5L-X52, superduplex, and 6Mo.PipeFireRuptureScenario: small jet, pool fire, large jet, and custom radiative plus convective fire exposure.PipeFireRuptureStudy: heat-up, thick-wall stress, Sellars-Tegart strain rate, accumulated strain, rupture event, and screening release estimate.PipeFireRuptureResult: time series, rupture summary, warnings, recommendations, release estimate, and JSON map.SafetyEvidenceReference: compact source reference for source drawings, piping specifications, process, fire, and material inputs.SafetyStudyReadiness: NOT_READY / SCREENING / DESIGN_GRADE verdict with findings and actions.PidTopologyEvidence: typed P&ID topology graph, boundary status, missing-tag register, and drawing-overlay readiness.PipeFireRuptureDataSource: governed data-source package binding inputs to evidence and review flags.PipeFireRuptureStudyRunner: readiness-gated orchestration of solver, standards check, uncertainty, and source-term handoff.PipeFireRuptureStudyHandoff: versioned package containing data source, readiness, result, uncertainty, and source term.PipeFireRuptureStandardsValidator: API 521 / ISO 23251 / NORSOK S-001 / piping-specification evidence-quality gate.PipeFireRuptureUncertaintyRunner: deterministic one-at-a-time perturbation screening of wall, corrosion, heat-flux, and initial-temperature assumptions.LineEquipmentListEvidence, DynamicBlowdownFlareStudyDataSource, DynamicBlowdownFlareStudyRunner, and
DynamicBlowdownFlareStudyHandoff: governed dynamic depressurization, PSV, and flare-load setup used to create a
source-traceable pressure profile before pipe-fire rupture screening.For governed source-document pipe-fire studies, the Word/HTML report should use a repeatable evidence-first structure. At minimum include:
NOT_READY, SCREENING, or DESIGN_GRADE, plus
the human-review status.SafetyEvidenceReference.pipe_fire_rupture_source_term_handoff.v1 when
rupture is predicted.Before the report is considered complete, apply these hard QA gates:
task_spec.md and results.json; no placeholder text may remain.NOT_READY,
SCREENING, or DESIGN_GRADE) and whether design-grade use is blocked.task_spec.md, source scripts, generated results.json, and
report must agree on the pressure-profile basis. If the task moved from a
reconstructed profile to a direct dynamic NeqSim profile, update all four.study_config.yaml explicitly sets
notebooks to not required; do not create false notebook execution warnings.analysis.md and neqsim_improvements.md must be filled for safety-critical
workflow/code gaps, including reporting, evidence-readiness, pressure-profile
export, plant-data evidence, and governed handoff gaps.Save a trapped_liquid_fire_rupture section in results.json:
{
"trapped_liquid_fire_rupture": {
"segments": [
{
"segment_id": "TL-001",
"limiting_failure_mode": "PIPE_RUPTURE",
"time_to_pipe_rupture_s": 420.0,
"time_to_flange_failure_s": null,
"minimum_failure_time_s": 420.0,
"final_pressure_bara": 145.0,
"final_wall_temperature_C": 530.0,
"pfp_required_endurance_s": 1800.0,
"pfp_margin_s": -1380.0,
"evidence_gaps": ["Material certificate not found"],
"recommendations": ["Provide thermal relief or documented PFP upgrade"]
}
],
"standards_applied": ["API 521", "ISO 23251", "ASME B31.3", "ASME B16.5"],
"assumptions": ["Generic API 5L X52 screening curve used pending certificate"],
"evidence_matrix": []
}
}
For Standard/Comprehensive studies, include:
toPassiveFireProtectionDemand(...).createRuptureSourceTerm(...) if rupture is predicted.neqsim-process-safety when consequences are material.For blowdown pipe fire rupture, save a pipe_fire_rupture section in
results.json:
{
"pipe_fire_rupture": {
"segment_id": "BD-001",
"pressure_profile_basis": "absolute bara profile from governed blowdown model",
"pipes": [
{
"pipe_id": "3DD100",
"fire_scenario": "Large jet fire 350 kW/m2",
"rupture_predicted": true,
"time_to_rupture_s": 110.0,
"rupture_pressure_barg": 32.03,
"rupture_wall_temperature_C": 760.0,
"release_estimate_kg_s": 21.9,
"evidence_gaps": []
}
],
"standards_applied": ["API 521", "ASME B31.3"],
"assumptions": ["Spreadsheet material curve used pending certificate review"]
}
}
For governed studies, also persist the runner handoff:
{
"pipe_fire_rupture_handoff": {
"schemaVersion": "pipe_fire_rupture_study_handoff.v1",
"calculationReadiness": {"verdict": "SCREENING"},
"standardsReadiness": {"verdict": "SCREENING"},
"result": {},
"uncertainty": {"schemaVersion": "pipe_fire_rupture_uncertainty.v1"},
"sourceTermHandoff": {"schemaVersion": "pipe_fire_rupture_source_term_handoff.v1"}
}
}
deltaP = bulk_modulus * alpha * deltaT.| Mistake | Fix |
|---|---|
| Using a generic flange class as final proof | Replace with project flange, bolt, and gasket pressure-temperature data |
| Crediting relief without a discharge path | Verify relief/thermal relief path on P&ID and relief design basis |
| Ignoring vents/drains | Include them in the isolation boundary and trapped-volume assessment |
| Assuming PFP is installed and intact | Require PFP specification and inspection/condition evidence |
| Reporting only rupture time | Also report assumptions, evidence gaps, PFP margin, and source-term consequence handoff |
| Treating pressure-profile units casually | Record whether the profile is bara or barg and convert explicitly |
| Letting superduplex map to 22Cr duplex | Use PipeFireRuptureMaterial.fromSpreadsheetMaterialName or a reviewed material curve |
| Running plant-wide pipe-fire cases without review | Ask the engineer to verify source-document, piping-specification, and user overrides before calculation |
docs/safety/trapped_liquid_fire_rupture.mddocs/safety/trapped_inventory_calculator.mdFrequently asked questions
This skill coordinates two related fire-rupture workflows:
The source record exposes this install command: npx skills add https://github.com/equinor/neqsim --skill ".github/skills/neqsim-trapped-liquid-fire-rupture". Inspect the command and pinned source before running it.
Alternatives
nexscope-ai/eCommerce-Skills
Comprehensive Shopify marketing strategy and execution. SEO optimization, email marketing automation, paid advertising management, conversion rate optimization, and customer retention strategies specifically for DTC Shopify brands. Use when the user asks about Shopify marketing, DTC marketing, Shopify SEO, or Shopify store growth.
K-Dense-AI/scientific-agent-skills
Author, review, migrate, simulate, and troubleshoot official Opentrons Python Protocol API v2 protocols for Flex and OT-2 robots. Use for robot-specific liquid handling, deck and labware setup, pipettes, modules, runtime parameters, liquid classes, and Opentrons App analysis. Use pylabrobot instead when one workflow must support multiple robot vendors.
minhnv0807/ai-business-skills
Use when conversion TRACKING must be set up or fixed before spending — Meta Pixel and Conversions API, Google Ads conversions with Enhanced Conversions, GA4, TikTok Pixel and Events API, server-side GTM, consent mode for GDPR and CCPA, UTM conventions, iOS ATT attribution windows, and a pre-launch verification checklist. Trigger on 'tracking setup', 'pixel setup', 'CAPI', 'GA4 events', 'conversions are not being recorded', 'Meta and Shopify numbers do not match'. Also use when launch is imminent
alirezarezvani/claude-skills
App Store Optimization (ASO) toolkit for researching keywords, analyzing competitor rankings, generating metadata suggestions, and improving app visibility on Apple App Store and Google Play Store. Use when the user asks about ASO, app store rankings, app metadata, app titles and descriptions, app store listings, app visibility, or mobile app marketing on iOS or Android. Supports keyword research and scoring, competitor keyword analysis, metadata optimization, A/B test planning, launch checklist