πŸ† Start Here: Register & Get Aura Credits: Aura Agent Hackathon

ιœ‡εΊ¦ Shindo β€” Japan Seismic Risk Intelligence Graph

Agent Name: ιœ‡εΊ¦ (Shindo) β€” Japan's official seismic intensity scale.

A cascading risk graph that connects earthquakes, fault zones, tsunamis, nuclear facilities, and prefectures β€” so an AI agent can reason over disaster chains, not just look up events.


Neo4j Competition Submission

Agent Name

ιœ‡εΊ¦ Shindo β€” named after Japan's official seismic intensity scale (JMA). Shindo measures the intensity of shaking at a specific location, not just the energy at the source. This agent reasons the same way: local impact and cascading consequences, not just raw magnitude.

What It Does

ιœ‡εΊ¦ Shindo is a seismic intelligence agent for Japan. The user clicks anywhere on a live SVG map to place a simulated earthquake. The agent immediately analyses the event against the graph:

  • Which fault zone ruptured, and what is its historical overdue ratio?

  • Which prefectures are in the felt zone? Which have nuclear facilities?

  • Are there historical analogs in the graph? What happened then?

  • Is tsunami risk expected given the fault type and depth?

Every claim the agent makes is anchored to a Cypher query result from the graph β€” no hallucination.

Beyond the map there are three analytical views:

  • EDA Charts β€” decade-by-decade event counts, fault zone death totals, prefecture composite risk index

  • Risk Analysis β€” statistical recurrence gauges: how long since each fault zone last had a major event versus its historical average interval, expressed as an overdue ratio

  • Cypher Queries β€” graph schema explorer with template query patterns pre-loaded

Dataset and Why a Graph Fits

Dataset: USGS Earthquake Hazards Program (~20,000 M4.0+ events, 1950–2024) + IAEA PRIS nuclear reactor registry + curated fault zone reference data + JMA prefecture data (47 prefectures with coastal classifications).

Why a graph: Japan's disasters don't happen in isolation β€” they cascade:


Fault rupture β†’ Ground shaking β†’ Tsunami generation β†’ Prefecture inundation β†’ Nuclear facility exposure

A CSV stores events. A graph stores the chain β€” and an agent can traverse it in a single query. The nuclear proximity layer is the distinguishing move. Post-Fukushima, this is the question that actually matters in Japanese disaster planning. In SQL you'd need a spatial join, a subquery, and three table hops. In Cypher:


MATCH (eq:Earthquake)-[:WITHIN_50KM_OF]->(nf:NuclearFacility)

WHERE eq.magnitude >= 6.5

RETURN eq.time, eq.magnitude, nf.name, nf.status

The 2011 Tōhoku earthquake didn't just happen β€” it traversed a graph:


Japan Trench ruptured

β†’ M9.1 earthquake struck

β†’ 40m tsunami generated

β†’ Miyagi, Iwate, Fukushima inundated

β†’ Fukushima Daiichi within 10km of impact

β†’ cascading nuclear crisis

Every link in that chain is a graph edge. The agent can trace it, explain it, and ask: which other fault zones have the same potential?


Agent in the Aura Console

Graph visualisation β€” full schema, all node types connected:

Agent configuration β€” ιœ‡εΊ¦ Shindo agent wired to the Earthquake Data instance:

All nine Cypher Template tools registered on the agent:


Agent in Action

Live map β€” Japan with all fault zones rendered, ready to simulate:

Active simulation β€” epicentre placed, impact zone calculated, nuclear exposure flagged:

Agent analysis β€” structured response grounded in graph data:

Data Analysis Dashboard β€” EDA Charts: decade bar chart, fault zone deaths, prefecture risk index:

Dashboard with agent responding to event analysis alongside EDA charts:

Risk Analysis tab β€” statistical recurrence overview with disclaimer:
Risk Analysis β€” per-fault-zone gauges (Noto Peninsula, Ryukyu Trench, Sagami Trough):

Cypher Queries tab β€” graph schema explorer with template patterns:

Cascade trace query executed β€” fault zone through to nuclear facility:

Live Agent

Live app: shindo-earthquake-graph.pages.dev

GitHub: Dean-Foulds/shindo-earthquake-graph


What Is the Shindo Scale?

ιœ‡εΊ¦ (shindo) is Japan's official seismic intensity scale, published by the Japan Meteorological Agency (JMA). Unlike moment magnitude (Mw), which measures energy released at the source, Shindo measures the intensity of shaking at a specific location. The same earthquake registers a different Shindo value in Tokyo versus Osaka.

Shindo JMA Level Typical Effects
0 Micro Not felt
1 Minor Felt by still observers indoors
2 Light Hanging objects sway noticeably
3 Weak Dishes rattle; felt outdoors
4 Moderate Unstable objects fall; most people frightened
5 Lower Strong Heavy furniture moves; many seek safety
5 Upper Strong Many people cannot move without holding on
6 Lower Very Strong Impossible to stand; partial building collapse
6 Upper Very Strong Cannot move at all; most unreinforced buildings collapse
7 Violent Ground deforms; landslides; extreme tsunami risk

This agent is named ιœ‡εΊ¦ because it reasons about local impact and cascading consequences β€” not just raw magnitude at the source.


Graph Schema

Node Labels

Label Count Key Properties
Earthquake ~20,000 id, magnitude, depth_km, lat, lon, year, decade, severity, deaths, tsunami
FaultZone 9 id, name, type, plates, predicted_max_mag, last_major_year
Tsunami 24 id, max_height_m, source_mag, year
Prefecture 47 id, name, region, lat, lon, coast, population_m
NuclearFacility 15 id, name, lat, lon, reactors, status, operator
Decade 8 year, label

severity values: minor (M<4.0) Β· moderate (M4.0–4.9) Β· strong (M5.0–6.9) Β· major (M7.0–7.9) Β· catastrophic (M8.0+)

Relationship Types

Relationship From β†’ To Meaning
ORIGINATED_ON Earthquake β†’ FaultZone Quake occurred on this fault
TRIGGERED Earthquake β†’ Tsunami Quake caused a tsunami
STRUCK Earthquake β†’ Prefecture Nearest affected prefecture
INUNDATED Tsunami β†’ Prefecture Tsunami reached this coast
UNDERLIES FaultZone β†’ Prefecture Fault runs beneath the prefecture
CONTAINS Prefecture β†’ NuclearFacility Plant is in this prefecture
WITHIN_50KM_OF Earthquake β†’ NuclearFacility Epicentre within 50km of plant
BORDERS Prefecture β†’ Prefecture Geographic adjacency
IN_DECADE Earthquake β†’ Decade Temporal grouping

Neo4j Best Practices Used

  • MERGE throughout β€” all load scripts are idempotent; safe to re-run without duplicates
  • Constraints before data β€” unique constraints on id/year created first
  • Indexes on query hotpaths β€” magnitude, year, tsunami indexed for range scans
  • Vector indexes β€” earthquake_embedding, fault_zone_embedding, nuclear_embedding, prefecture_embedding, tsunami_embedding via db.index.vector.queryNodes
  • Read-only guard β€” cypher_read() in the API rejects any query containing write keywords before it reaches Neo4j

Agent Tools

Cypher Templates (9 registered)

Tool Description
the_cascade_trace Full chain: fault zone β†’ earthquake β†’ tsunami β†’ prefecture β†’ nuclear facility
compound_risk_corridors Subduction faults overlapping nuclear-hosting, Pacific-coast prefectures
historical_analog_finder Past events near a given location and magnitude
nuclear_proximity_risk M6.5+ events within 50km of any nuclear plant
decade_pattern_analysis Event counts and deaths grouped by decade
fault_zone_lethality Total deaths attributed to each fault zone
the_hamaoka_question Hamaoka nuclear plant specific risk analysis
region_vulnerability_score Composite risk score per prefecture
graph_summary Node and relationship counts across the full schema

Text2Cypher

Natural language β†’ Cypher generation. Examples:

  • "Which prefectures on the Nankai Trough also have nuclear plants?"

  • "What M7+ earthquakes struck Miyagi in the 2000s?"

  • "Which fault zone has caused the most deaths?"

  • "Show me every earthquake that triggered a tsunami and hit an active nuclear plant"

Similarity Search

Given a simulated earthquake, the agent finds historical analogs by magnitude, depth, and location:


MATCH (e:Earthquake)

WHERE abs(e.lat - $lat) < 3 AND abs(e.lon - $lon) < 3

AND abs(e.magnitude - $mag) < 1.5

OPTIONAL MATCH (e)-[:ORIGINATED_ON]->(fz:FaultZone)

OPTIONAL MATCH (e)-[:TRIGGERED]->(t:Tsunami)

RETURN e.id, e.magnitude, e.year, e.place, fz.name, t.max_height_m

ORDER BY abs(e.magnitude - $mag) + abs(e.lat - $lat) + abs(e.lon - $lon)

LIMIT 5

Vector semantic search is also available over node embeddings using Voyage AI voyage-3 (1024-dim) across all five node types: Earthquake, FaultZone, NuclearFacility, Prefecture, and Tsunami.