Kshana PNT-resilience simulator

Registre officiel Cartes, voyage et météo

Validated Kshana PNT simulator: orbits, GNSS, fusion, receiver trust, interference maps.

Installation

Ajoutez ceci à la configuration MCP de votre client (Claude Desktop : claude_desktop_config.json ; Cursor : .cursor/mcp.json ; VS Code et les autres utilisent la même forme « mcpServers »).

OCI package ghcr.io/ashfordeou/kshana-mcp:0.39.0
Claude Code
claude mcp add kshana-pnt-resilience-simulator -e 'KSHANA_MCP_IQ_DIR=<KSHANA_MCP_IQ_DIR>' -e 'KSHANA_MCP_IQ_MAX_SAMPLES=50000000' -- docker run -i --rm ghcr.io/ashfordeou/kshana-mcp:0.39.0
Configuration JSON (Claude Desktop, Cursor, VS Code)
{
    "mcpServers": {
        "kshana-pnt-resilience-simulator": {
            "command": "docker",
            "args": [
                "run",
                "-i",
                "--rm",
                "ghcr.io/ashfordeou/kshana-mcp:0.39.0"
            ],
            "env": {
                "KSHANA_MCP_IQ_DIR": "<KSHANA_MCP_IQ_DIR>",
                "KSHANA_MCP_IQ_MAX_SAMPLES": "50000000"
            }
        }
    }
}

Variables d'environnement

  • KSHANA_MCP_IQ_DIR Folder the GNSS IQ tools (iq_scene, iq_acquire, iq_track, iq_frontend, iq_info, iq_campaign, iq_campaign_status) may read and write; every IQ path argument is relative to it. Unset leaves the IQ file tools off; the other tools are unaffected. In a container, mount a volume and point this at it.
  • KSHANA_MCP_IQ_MAX_SAMPLES Most complex samples one IQ call may generate or process (default 50000000).
NPM package kshana-mcp
Claude Code
claude mcp add kshana-pnt-resilience-simulator -e 'KSHANA_MCP_IQ_DIR=<KSHANA_MCP_IQ_DIR>' -e 'KSHANA_MCP_IQ_MAX_SAMPLES=50000000' -- npx -y kshana-mcp@0.39.0
Configuration JSON (Claude Desktop, Cursor, VS Code)
{
    "mcpServers": {
        "kshana-pnt-resilience-simulator": {
            "command": "npx",
            "args": [
                "-y",
                "kshana-mcp@0.39.0"
            ],
            "env": {
                "KSHANA_MCP_IQ_DIR": "<KSHANA_MCP_IQ_DIR>",
                "KSHANA_MCP_IQ_MAX_SAMPLES": "50000000"
            }
        }
    }
}

Variables d'environnement

  • KSHANA_MCP_IQ_DIR Folder the GNSS IQ tools (iq_scene, iq_acquire, iq_track, iq_frontend, iq_info, iq_campaign, iq_campaign_status) may read and write; every IQ path argument is relative to it. Unset leaves the IQ file tools off; the other tools are unaffected. In a container, mount a volume and point this at it.
  • KSHANA_MCP_IQ_MAX_SAMPLES Most complex samples one IQ call may generate or process (default 50000000).
PYPI package kshana-mcp
Claude Code
claude mcp add kshana-pnt-resilience-simulator -e 'KSHANA_MCP_IQ_DIR=<KSHANA_MCP_IQ_DIR>' -e 'KSHANA_MCP_IQ_MAX_SAMPLES=50000000' -- uvx kshana-mcp==0.39.0
Configuration JSON (Claude Desktop, Cursor, VS Code)
{
    "mcpServers": {
        "kshana-pnt-resilience-simulator": {
            "command": "uvx",
            "args": [
                "kshana-mcp==0.39.0"
            ],
            "env": {
                "KSHANA_MCP_IQ_DIR": "<KSHANA_MCP_IQ_DIR>",
                "KSHANA_MCP_IQ_MAX_SAMPLES": "50000000"
            }
        }
    }
}

Variables d'environnement

  • KSHANA_MCP_IQ_DIR Folder the GNSS IQ tools (iq_scene, iq_acquire, iq_track, iq_frontend, iq_info, iq_campaign, iq_campaign_status) may read and write; every IQ path argument is relative to it. Unset leaves the IQ file tools off; the other tools are unaffected. In a container, mount a volume and point this at it.
  • KSHANA_MCP_IQ_MAX_SAMPLES Most complex samples one IQ call may generate or process (default 50000000).

Documentation

Tirée du README du projet sur GitHub, actualisée chaque semaine. Les liens ouvrent GitHub.

Sommaire
  1. Rehearse the minute GNSS goes dark
  2. What's new in 0.39
  3. What's new in 0.38
  4. 0.38 in depth
  5. Kshana Studio
  6. Capabilities
  7. How a run works
  8. Missions
  9. Evidence
  10. Install
  11. Architecture
  12. AI assistant
  13. Editions
  14. Research
  15. Cite
  16. Licence
  17. Reference

Kshana · क्षण · the precise instant

An open-source simulator for PNT (positioning, navigation and timing) resilience.

Open Kshana Studio · Install · Capabilities · Evidence · Research · Documentation · Cite

Contents

Rehearse the minute GNSS goes dark

Kshana replays jamming, spoofing and clock holdover when GNSS (Global Navigation Satellite System) signals fail, and tells you how long a system keeps time and position inside its budget, and which clock or sensor buys the most margin. It is one Rust engine. It runs in a terminal, a notebook, an IDE (integrated development environment), an AI (artificial intelligence) assistant, or in your browser.

Every run is reproducible bit for bit from the scenario, the seed and the engine version. Every capability carries one of three labels in a machine-checked ledger: VALIDATED (an independent external oracle agrees), MODELLED (internally consistent, and said out loud) or PARTNER (a hardware partner owns it).

Status: v0.39.0. A validated, reproducible simulation substrate for PNT resilience. Timing and holdover come first, because that domain is the best validated. Kshana is a study and trade-off instrument: not radio-frequency (RF) signal-generator hardware (it drives no radio and transmits nothing; its signal-level output is baseband IQ sample files for software receivers), not a hardware or certified GNSS receiver (its software receiver is an analysis tool) and not a flight product. New to the field? Start with the plain-language primer and the glossary.

What's new in 0.39

0.39 adds no feature and changes no result; the engine's output is the 0.38 output. It fixes one thing on the command line, updates dependencies of the cross-validation tooling, and states the benchmark verdicts in full.

  • Command line. kshana kinds | head (any closed standard output) no longer panics: the program exits quietly with status 141, as other tools do for a closed pipe. Other write errors still report themselves.
  • Dependencies. memmap2 0.9.11 in the two ANISE cross-check locks and pillow 13.0.0 and certifi 2026.10.19 in the oracle environment pins, all under xval/: nothing that ships changed.
  • kshana-bench, all verdicts. Against the pre-registered bars, three are NOT MET, each pinned by a test: A2 (agc_k_sigma AUC 0.766 against at least 0.80), D1 (largest gap 0.0301) and task (b) R1 (carried, not re-run). No bar was loosened (Bench).

What's new in 0.38

0.38 makes the neutral referee measurable: it scores receiver logs against a published test schedule, reads more receivers and sensors, tests timing systems, and ships a benchmark and an interference observatory. It stays advisory: nothing here is certified, no result is a type approval, and nothing transmits. Each row states what the ledger holds for it (how a label is earned); a status names only what was checked, and the ledger row and the linked page say what was not.

New in 0.38What it does, and whyLedger statusRead
Jammertest scoringkshana jammertest import reads the published NPRA test catalogue and transmission plan as scheduled truth; jammertest score scores a receiver log per test (detection latency, missed alarms, false alarms, time to recover), as a signed evidence pack if you give a keyMODELLED: one ledger row. The bars were pre-registered before any scored run; on the JammerTest 2024 data the minimum-data rule failed in both runs (4 and 7 scorable windows against 10 required), so no bar is assessable and nothing is claimedJammertest
The receiver's own flagsUBX-NAV-STATUS spoofDetState, UBX-SEC-SIG and NovAtel RXSTATUS read into a per-epoch self_report and compared with Kshana's alarms (both, receiver only, Kshana only, neither); a Septentrio SBF reader and read-only --serial inputMODELLED; agreement between a receiver's detector and Kshana's is not validationReceiver trust
More receivers and sensorsRTKLIB .pos, NovAtel OEM7, RTCM 3 MSM4/MSM7 C/N0 (from the BSD-licensed pyrtcm tables, not the RTCM text), GNSS-SDR monitor streams, an IMU log as a second sensor, a ROS 2 package, a gnss_lib_py bridge, and imu-fit for hybrid sensor parametersMODELLED: six ledger rows; self-written fixtures only, no capture from a real receiver, IMU, GNSS-SDR run or ROS graph was readMachine inputs
Timing and holdover teststhe holdover-test kind scores a holdover test (GNSS removed by the operator, holdover, recovery) from a measured time-error record against ITU-T masks, "measured against the mask"; linuxptp and chrony log readers; the hardware stages and the lab-attestation fieldMODELLED: two ledger rows; the times are the operator's statement, not verifiedTiming HIL, Hardware safety
Standards packs, LunaNet AFS, lab round tripscored packs for DHS RPCF, IMO MSC.1/Circ.1575 and ICAO Doc 9849 Appendix F against bars stated before the run, "supports evidence for"; a NIST IR 8323r1 crosswalk; a LunaNet AFS code generator and checker; a signed pack that links a lab run's scenario, test conditions, receiver log and scoreMODELLED for the packs and the round trip; the AFS code check is VALIDATED against its printed check columns (see the ledger rows)Standards, LunaNet AFS
kshana-bench and the observatoryfixed tasks, splits and metrics for interference detection, IQ detection, holdover prediction and the optimism gap, with a sealed holdout and a static leaderboard; a reproducible daily interference product with a 24 h delay, coarse cells and no attributionno ledger row of its own: it scores submissions, and its baselines are labelled MODELLED in the result files; against the pre-registered bars the scorer, C1 to C3 and D2 are met and three bars are NOT MET (pinned by tests): A2 (agc_k_sigma AUC 0.766 against at least 0.80 on the test split), D1 (largest gap 0.0301) and task (b) R1 (carried, not re-run); see xval/bench/RESULTS-v2.mdBench, Observatory
Exporterstrust telemetry as Home Assistant MQTT discovery and state messages (publish only, no credentials) beside Prometheus, CEF, LEEF and OTLPMODELLED: one ledger rowTrust telemetry
Optical link margin against timethe optical-atmosphere kind can write one seeded realisation of a site's weather as a link-margin seriesMODELLED: one ledger row; one draw from the model, not the climateOptical atmosphere

0.37's highlights: changelog. The full 0.38 list is in the changelog.

0.38 in depth

Each capability from the table above, in a few lines: what it does, one command to run it, one picture drawn from a real run of the engine, and what the ledger holds for it. The pictures are written by tools/gen_figures_038.py into docs/figures/0.38/ (never drawn by hand): python3 tools/gen_figures_038.py rewrites them from a built engine, and --check fails if one is stale or its caption here differs. Where an input is a log, it is a made-up one the script writes, because the real third-party logs are never vendored, and the caption says so. Everything below is advisory: not certified, not a type approval, and nothing transmits. A status names what was checked and nothing more; how a label is earned.

Jammertest scoring

kshana jammertest import turns the published NPRA test catalogue and transmission plan into scheduled truth, and kshana jammertest score scores a receiver log against it: for each scheduled test, whether it was detected, how late, and how long the receiver took to recover, plus false alarms outside every slot. The catalogue is fetched, never vendored.

xval/jammertest-plan/fetch.sh ../jammertest-plan
kshana jammertest score session.toml --catalog ../jammertest-plan/testcatalog2025.json \
    --plan ../jammertest-plan/plan-tuesday-2025-09-16.json --location 1 --json

Ledger status: MODELLED. The bars were fixed before any scored run; on the JammerTest 2024 data the minimum-data rule failed in both runs, so no bar is assessable and nothing is claimed. Jammertest.

The receiver's own flags

UBX-NAV-STATUS spoofDetState, UBX-SEC-SIG and NovAtel RXSTATUS are read into a per-epoch self_report and set beside Kshana's alarms: both, receiver only, Kshana only, or neither. A Septentrio SBF reader and a read-only --serial input feed the same comparison. Neither side is ground truth.

kshana receiver-trust session.toml     # [log] format = "ubx", path = "receiver.ubx"

Ledger status: MODELLED. Agreement between a receiver's detector and Kshana's is not validation. Receiver trust.

More receivers and sensors

RTKLIB .pos, NovAtel OEM7, RTCM 3 MSM4/MSM7 C/N0, GNSS-SDR monitor streams, an IMU log as a second sensor, a ROS 2 package and a gnss_lib_py bridge all end in the same receiver-trust timeline. imu-fit reads the sensor parameters the hybrid and fusion scenarios need off a stationary IMU log, so a scenario can be run with the sensor you actually have.

kshana imu-fit still.csv --format csv --axis x --expected-mean 0 --id bench-imu

Ledger status: MODELLED. Self-written fixtures only; no capture from a real receiver, IMU, GNSS-SDR run or ROS graph was read. Machine inputs.

Timing and holdover tests

The holdover-test kind scores a holdover test (GNSS removed by the operator, holdover, recovery) from a measured time-error record against ITU-T masks, and says so in those words: measured against the mask. linuxptp and chrony log readers feed it; the hardware stages and the lab-attestation field say who stated what.

kshana scenarios/holdover-test-example.toml

Ledger status: MODELLED. The times GNSS was removed and restored are the operator's statement, not verified. Timing HIL, Hardware safety.

Standards packs

Scored packs for the DHS Resilient PNT test profiles, IMO MSC.1/Circ.1575 and ICAO Doc 9849 Appendix F, plus a NIST IR 8323r1 crosswalk in compliance-report. Each test runs a bundled scenario and compares a result field with a bar stated before the run; a test that needs a receiver log is listed as needing an input, not scored. The wording is "supports evidence for".

kshana standards-pack list
kshana standards-pack run imo-circ-1575

Ledger status: MODELLED. A met bar says a modelled scenario met a stated bar, nothing about a product; every miss is kept and pinned by a test. Standards.

LunaNet AFS

The LunaNet Augmented Forward Signal code generator (Gold, Weil and tertiary codes, the message frame and its error coding) and a checker for a recorded or generated symbol stream, pinned to one edition of the specification.

kshana lunanet-afs-check spec
kshana lunanet-afs-check generate --frames 2 --out afs.sym
kshana lunanet-afs-check symbols afs.sym

Ledger status: VALIDATED for the code and synchronisation checks, against the values the specification prints (which it marks TBC); one check is NOT MET, kept and pinned (one printed tertiary-code column differs: the document prints the same value for two PRNs). The LDPC and CRC words of subframes 2 to 4 are not checked. The ledger rows say exactly which. LunaNet AFS.

Lab round trip

kshana.test-conditions/1 is a published description of what a laboratory did (events, times, powers). kshana evidence round-trip links the scenario hash, the conditions hash, the receiver log hash and the score into one signed pack, and refuses a pack whose conditions and scoring scenario disagree about the events. Kshana never produces or replays a signal: how a scenario reached a receiver is the operator's responsibility.

kshana evidence --help

The picture is the layout of a pack. Ledger status: MODELLED. Test conditions, Test bench.

kshana-bench

Fixed tasks, splits and metrics for interference detection, IQ detection, holdover prediction and the optimism gap, with a sealed holdout and a static leaderboard. It scores submissions; it is not a ranking of receivers.

kshana bench baseline --task d --split test --out results/

Ledger status: no ledger row of its own; the baselines are labelled MODELLED in the result files. Against the pre-registered bars the scorer, C1 to C3 and D2 are met and three bars are NOT MET, each pinned by a test: A2 (agc_k_sigma AUC 0.766 against at least 0.80 on the test split), D1 (largest gap 0.0301) and task (b) R1 (carried from the earlier campaign, not re-run). The figures are in xval/bench/RESULTS-v2.md. Bench.

Interference observatory

One product per UTC day and region from an open aircraft-position archive, on a fixed coarse grid: each cell is degraded, not degraded, or not observed (which is not "clear"). Released no earlier than 24 h after the day ends, with small cells suppressed and no attribution of cause.

kshana interference-map daily /path/to/extracted/2026-09-15 \
    --dataset adsb-lol --day 2026-09-15 --bbox 53.5,9.0,66.0,31.0 --out products/

The picture is the committed sample days, not an observatory product. Ledger status: MODELLED: no external oracle, no ground truth and no cause attribution; a cell that is not observed was not assessed, which is not the same as clear. Observatory method.

Exporters

Trust telemetry as Prometheus text, CEF, LEEF, OTLP and Home Assistant MQTT discovery and state messages. The command publishes only to a destination you give it and holds no credentials.

kshana trust-telemetry --result session.result.json --print-metrics
kshana trust-telemetry --result session.result.json --print-syslog --format cef

Ledger status: MODELLED. Trust telemetry.

The optical-atmosphere kind can write one seeded realisation of a site's weather as a link-margin series: cloud episodes, a liquid-water column for each, one scintillation sample per step. The Studio's Optical PNT page opens the optical-atmosphere scenarios.

kshana scenarios/optical-atmosphere-network.toml

Ledger status: MODELLED. One draw from the model, not the climate. Optical atmosphere.

New Studio views

kshana.dev/studio gains a Bridge replay (two runs side by side on one mission clock, at /studio/replay/), an Optical PNT page (/studio/optical/), a Holdover test page (/studio/holdover/) and an observatory viewer (/studio/observatory/). They run the same engine in the browser, nothing is uploaded, and they carry the same advisory statement. The pictures above are drawn from the engine's own output by a script; they are not screenshots of these pages.

Space-user navigation (gnss-ssv)

For a spacecraft above, around or far past the GNSS orbits: how many GNSS signals it can use, how strong they are, how good the geometry is, and what an onboard filter can do with them. One kind, four modes, chosen by the scenario's tables: a shell of users (the share of time with one and four signals, per constellation), a trajectory (signals, C/N0, dilution of precision and the limb-ray medium along an orbit), a navigation run (a nine-state filter on pseudoranges, to the Moon) and a formation (relative navigation of deputies about a chief). The public source for the availability comparison is the interoperable GNSS Space Service Volume booklet (UN OOSA ST/SPACE/75, from the International Committee on GNSS), which is itself a simulation; it is fetched, never vendored. Full page: docs/SSV.md.

kshana scenarios/gnss-ssv-shell.toml            # shell: the upper space service volume, reduced size
kshana scenarios/gnss-ssv-heo.toml              # trajectory: a high Earth orbit, limb medium
kshana scenarios/gnss-ssv-nav-lunar.toml        # navigation: an onboard filter toward the Moon
kshana scenarios/gnss-ssv-formation-heo.toml    # formation: relative navigation

Ledger status: MODELLED, and the comparison with the booklet mostly misses. The bars were fixed before the run. Of eight, only S0 (the inverse link budget, 13 of 13 values) and S6 (the lunar mission) are met. S1 to S5 and S7 are NOT MET: the upper and lower service volume geometry (43 of 52 and 48 of 52 cells), the 15/20/25 dB-Hz upper service volume, the six GEO missions, the HEO mission, and the parametric sidelobe pattern against measured GPS panel patterns. Almost every miss in S1 to S5 involves GLONASS, and the booklet prints two different reference angles for it; a diagnostic variant that uses the other pair brings S1, S2 and S4 to every cell, but it does not replace the run of record and no row is VALIDATED. The formation run's absolute filter is also overconfident (mean normalised error squared well above the value of about 3 that a consistent filter gives).

Space-user navigation, what the comparison shows.

Lunar infrastructure (lunar-infrastructure)

The Moon's orbit and surface as navigation and geodetic infrastructure, in five studies chosen by study: od-consistency (an onboard Earth-GNSS orbit determination in a halo orbit against an independent ground one), carrier-phase (integer ambiguity fixing between surface stations and an orbiter), frame-coestimation (the lunar datum from Earth-station ranging with and without orbiter links), space-tie (laser, VLBI and GNSS offsets on one spacecraft against the local-tie error) and geodesy-sensitivity (which observable family sees the Love numbers h2, k2 and l2). The model is a restricted three-body one with stated simplifications and illustrative inputs. Full page: docs/LUNAR-INFRASTRUCTURE.md.

kshana scenarios/lunar-infrastructure-od-consistency.toml
kshana scenarios/lunar-infrastructure-carrier-phase.toml            # quick; the scored run takes about eight minutes
kshana scenarios/lunar-infrastructure-frame-coestimation.toml
kshana scenarios/lunar-infrastructure-space-tie.toml
kshana scenarios/lunar-infrastructure-geodesy-sensitivity.toml

Ledger status: MODELLED, and three bars are NOT MET. The numerics are checked against independent numpy and scipy programs; nothing is compared with a measurement of a lunar quantity, and nothing is VALIDATED. Met: the two orbit solutions are consistent (mean q 5.81 against 6 expected), and orbiter links raise the smallest datum eigenvalue about 111-fold, assuming a known orbit. Not met: the injected 3e-10 m/s2 model error is not detected (C3: the onboard solution is known to about 350 m, so about ten metres hides in its covariance); integer fixing is not achieved (1 to 3 % success at 25 dBi, and at the registered 12 dBi the problem cannot be formed); and the trace half of G3 for adding an observable family (the trace rose in 12 of 28 additions, each time because the family raised the rank). Each miss is pinned by a test. Lunar infrastructure.

Kshana Studio

Open kshana.dev/studio and the whole engine runs in your browser, compiled to WebAssembly. Nothing to install, and nothing is uploaded. The Studio has two views of the same engine, and a switch in the header moves between them, keeping the scenario, the view and any settings you changed.

The Simple view is where the Studio opens. It starts from questions (how many satellites can I see, can I trust my position fix, how long can a clock keep time, what does a jammer do to my receiver) and from a map of everything the engine can do, each area with its share of validated methods. Open a scenario and the answer comes first: one plain sentence, written for what that scenario measures, then its key figures and a chart. At most five settings are on show, the ones that change the answer most; the rest wait under Advanced settings. How this is computed explains the method, and For researchers gives the engine's own figures, the scenario file, the code to run it from Python and the citation.

The Advanced view is the full dashboard: the scenario library, five numbered steps (Choose, Set, Run, Read results, Share or export), the key figures with PASS and FAIL chips where the run states a threshold, and every panel: overview, charts, maps, replay, the engine's report and exports. One search box reaches scenarios, domains and the fields inside them, and you can pin up to four runs and compare them side by side.

The Simple view's opening screen, and the Advanced view after a run

The Studio's source and its build notes are in web/README.md.

The site

The rest of kshana.dev is built from this repository's own files and engine runs: missions, capabilities, the evidence ledger, the published research and the editions.

Capabilities

One engine covers the whole failure chain, from the first jammed satellite to the last nanosecond of clock holdover. The engine has 87 scenario kinds; kshana kinds lists them and docs/SCENARIOS.md documents every field.

CapabilityWhat it answers
Spectrumhow a jammer takes the GNSS L band, band by band, second by second
Clocks and timinghow long each clock holds time after GNSS is lost
Constellations around any bodycoverage, dilution of precision and availability around the Earth, the Moon or Mars
Solar systemwhere every planet is, and the light time of any link
Low-Earth-orbit navigationa pass, a link, a navigation message and a fused fix, stage by stage
Campaignsa chained mission, a sweep or a Monte Carlo ensemble in one scenario
Animationa run's time series as an animated drawing, a player or frames
Reportsevery figure with its unit and its label, in HTML (HyperText Markup Language) and JSON (JavaScript Object Notation)
Interoperability exportsorbits and geometry for other tools: SP3, CCSDS OMM and OEM, CZML, KML, GeoJSON, STK and SigMF
Maritime trustcan the bridge trust this fix: a 0-100 score and reasons for a vessel's NMEA, live or from a log (advisory, not type-approved navigation equipment)
NMEA training streamssynthetic bridge NMEA with scripted jamming and spoofing and an instructor log, for crew training (text only; never for a vessel's live navigation systems; advisory, not type-approved navigation equipment)
Interference mapwhere aircraft and ships reported degraded navigation data, and how much of a route it touches
Evidence packsa signed, offline-verifiable technical record of a vessel's log window and what the engine computed from it, for an incident report (advisory, not type-approved navigation equipment)
Trust telemetrythe trust stream as Prometheus metrics, SIEM events and optional OpenTelemetry, with a sample Grafana dashboard (deploy/grafana/kshana-gnss-trust.json)
Signal K and OpenCPNthe trust score on a boat's Signal K server and in OpenCPN, with a reference build for a small computer next to the receiver (advisory, not type-approved navigation equipment)
Test-bench exportkshana bench-export: a scenario's vehicle motion and events for a laboratory GNSS simulator (no signal is written), and how to score the receiver's log afterwards
Compliance mapping and reportkshana compliance-report: which rows of public resilience frameworks a set of runs supports evidence for, and the gap that is left
Notebooksrunnable tutorials: vessel trust and training streams, an interference-map route exposure, compliance mapping and the test bench, quantum against classical GDOP
Galileo OSNMA verifierwhich satellites' navigation data a receiver can cryptographically authenticate, and why a check fails; Kshana grants no rights under the EU's OSNMA ICD IPRs (see the NOTICE in the page)

The export formats in full: SP3 is Standard Product 3; CCSDS OMM and OEM are the Orbit Mean-elements and Orbit Ephemeris Messages of the Consultative Committee for Space Data Systems; CZML and KML are the Cesium and Keyhole Markup Languages; STK is Systems Tool Kit; SigMF is the Signal Metadata Format.

Each capability, drawn from a real run: the L-band waterfall, the coverage map, the solar system and a low-Earth-orbit pass

Run any of them with kshana example <scenario> > s.toml && kshana s.toml: the scenarios are l-band-waterfall-jamming, constellation-multi-gnss-coverage, solar-system-tour and leo-pass-iridium.

The maritime and interference capabilities, drawn from committed synthetic inputs: a trust score, an interference map with route exposure, a training stream and an evidence pack

All four are made-up data and advisory: they show the format and the behaviour of the software, not how any receiver or system performs against interference. Run the first with kshana receiver-trust examples/maritime-trust/session.toml, the second with kshana route-exposure on the samples in examples/interference-map/, the third with kshana nmea-scenario scenarios/training/coastal-drag-off.toml --out drag.nmea (training use only: never feed it to live navigation equipment), and the fourth as in docs/EVIDENCE-PACKS.md.

The full capability table, domain by domain

The full domain-by-domain detail follows; for a per-capability maturity ledger see docs/CAPABILITY.md and docs/VALIDATION.md.

DomainCapability
Orbit & geometrySGP4/SDP4 propagation (validated to 4.12 mm against all 666 AIAA 2006-6753 vectors); real two-line elements (a committed, date-stamped Celestrak gps-ops snapshot) or synthetic Walker-delta constellations whose mean elements realise the i:T/P/F formula to under 1 km over a 24 h propagation; multi-constellation visibility, dilution of precision — geometric, position, horizontal, vertical and time (GDOP/PDOP/HDOP/VDOP/TDOP), validated to 1e-6 against gnss_lib_py 1.0.4, Stanford NAV Lab (Navigation and Autonomous Vehicles Laboratory), and GNSS availability; a gradient-free constellation-design optimiser, streets-of-coverage minimum-satellite sizing, a multi-constellation comparison tool, and a Walker design sweep that tabulates coverage / PDOP / revisit-time over a planes × satellites grid and reports the Pareto-optimal designs.
Numerical propagatorA Cowell numerical propagator (src/propagator.rs) complementing the analytic SGP4/SDP4 path, with a hierarchical seven-perturbation force model (src/forces.rs): two-body + the full J2–J6 zonal field (the Earth-oblateness zonal harmonic coefficients J2 to J6; the exact analytic gradient of its disturbing potential), an optional EGM2008 tesseral spherical-harmonic geopotential to degree/order 70 (Earth Gravitational Model 2008; src/gravity_sh.rs; real NGA — US (United States) National Geospatial-Intelligence Agency — coefficients, Holmes–Featherstone normalized-Legendre recurrence, cross-checked against the closed-form Legendre functions and the analytic ∇V identity), epoch-driven Sun and Moon third-body gravity (a built-in low-precision ephemeris, no DE/SPK — Development Ephemeris / SPICE Spacecraft and Planet Kernel — kernel), solar-radiation pressure (cannonball model with a conical umbra+penumbra shadow), atmospheric drag (Vallado piecewise-exponential density, co-rotating atmosphere), the post-Newtonian Schwarzschild relativistic correction, and the Lense–Thirring frame-dragging term (IERS — International Earth Rotation and Reference Systems Service — Conventions 2010 §10, linear in Earth's angular momentum, ~1–2 orders below Schwarzschild) — driven by a choice of two adaptive integrators (RK4 — fourth-order Runge–Kutta — step-doubling or the Dormand–Prince RK5(4) embedded pair). Validated against Orekit 12.2 (CS GROUP, Apache-2.0) NumericalPropagator/DormandPrince853 — 278 epochs across LEO (low Earth orbit) + GTO (geostationary transfer orbit), the conservative-force tiers agreeing to a worst-case **\Δr\0.08 m over 24 h** (tests/numerical_cowell_propagator_reference.rs); the atmospheric-drag tier is characterised separately (≈ 333 m / 24 h) and the absolute Sun/Moon-ephemeris and density inputs stay honestly Modelled. Additional internal evidence (not external validation): the unperturbed orbit is checked against the exact universal-variable Kepler solution to sub-metre over 24 h, energy/angular-momentum conserve to ~1e-9, and each perturbation matches a hand-derived closed-form signature.
Maneuvers & trajectory designImpulsive ΔV nodes with 6×6 covariance propagation (ECI — Earth-centred inertial — / LVLH — local vertical, local horizontal — execution-error frames), finite-burn integration checked against the closed-form Tsiolkovsky rocket equation to < 0.01 %, an Izzo-2015 single-revolution Lambert solver, an exact universal-variable Kepler propagator, and a porkchop (launch × arrival) C3 (launch energy) / arrival-V∞ sweep emitted as a JSON contour grid — the performance-simulation layer above GMAT/Orekit, with every Lambert output round-tripped against two-body truth and the porkchop minimum checked against the analytic Hohmann floor.
Time systems & reference framesIERS leap-second UTC / TAI / TT / UT1 scales (Coordinated Universal Time, International Atomic Time, Terrestrial Time, and the Earth-rotation time Universal Time 1), a Julian-date API (application programming interface), the IAU-2000 (International Astronomical Union) Earth Rotation Angle (ERA), GMST-based (Greenwich Mean Sidereal Time) TEME ↔ ECEF (true equator, mean equinox ↔ Earth-centred, Earth-fixed) with WGS-84 (World Geodetic System 1984) geodetic frames, IAU 2006 precession (Fukushima–Williams), full IAU 2000A/2000B nutation, IERS polar motion, and the equinox-free CIO-based IAU 2006/2000A GCRS↔ITRS reduction (CIO = Celestial Intermediate Origin) — all validated bit-for-bit against the SOFA/ERFA vectors, and independently cross-checked against ANISE (the pure-Rust NAIF/SPICE reimplementation; NAIF = the Navigation and Ancillary Information Facility of NASA, the US National Aeronautics and Space Administration): kshana's GCRS→ITRS vs ANISE's ITRF93 (International Terrestrial Reference Frame 1993) from JPL's earth_latest_high_prec.bpc, the same IERS Earth-orientation parameters fed to both, agree to ≤ 0.86 m on the ground / ≤ 3.6 m at GNSS orbit (max 0.028″) across eight epochs 2020–2023.
InertialThree-axis strapdown INS — quaternion attitude, WGS-84 NED (north-east-down) mechanization, coning/sculling compensation, and a deterministic IMU error model (scale-factor, misalignment, g-sensitivity, quantization, drift); a first-principles cold-atom-interferometer accelerometer (Mach–Zehnder phase, quantum projection noise, contrast decay, vibration coupling) that derives the velocity-random-walk coefficient; and a sequential-importance-resampling particle filter for map-aided (terrain-/gravity-referenced) GPS-denied navigation.
Alt-PNT (GPS-denied)A cold-atom gravimeter measurement model whose white-noise floor (σ = ASD/√τ, ASD = amplitude spectral density) is derived from the CAI accelerometer physics; a low-degree, fully-normalised spherical-harmonic gravity-anomaly field (checked against the closed-form Legendre functions and a hand-derived single-term anomaly) plus synthetic mascons; the gravity-functional synthesis kernel (gravity_sh::gravity_magnitude / gravity_disturbance_mgal) — the "map reader" a gravity-aided navigator matches against — is validated against the GRS80 normal-gravity standard (Geodetic Reference System 1980), reproducing the closed-form Somigliana normal gravity and the published γ_e / γ_p to 3.5e-12 and producing a physically-bounded disturbance map from the real ICGEM (International Centre for Global Earth Models) EGM2008 field (RMS — root mean square — ≈ 26 mGal, max ≈ 89 mGal at d/o 70; tests/icgem_gravity_reference.rs); and a gravity-map-matching particle filter that recovers a GPS-denied track from the anomaly sequence it flies through. It extends to terrain-referenced navigation (TERCOM/SITAN — terrain contour matching / Sandia Inertial Terrain-Aided Navigation — against an SRTM (Shuttle Radar Topography Mission) .hgt DEM (digital elevation model), src/altpnt/terrain.rs), an IGRF-14 geomagnetic main field (14th-generation International Geomagnetic Reference Field) to degree/order 13 (src/igrf.rs, checked against the tilted-dipole closed form and ∇V finite differences), and a combined gravity + magnetic + terrain navigator that fuses all three scalar channels through one particle filter (information is additive — no channel makes the fix worse). A 60-minute GPS-denied benchmark (a ~700 km / one-hour outage where the inertial solution drifts to ~70 km) is recovered to ~145 m (< 500 m) by a hierarchical coarse-to-fine matcher — the ESA NAVISP (Navigation Innovation and Support Programme) Quantum Wayfarer target.
FusionLoosely-coupled 15-state GNSS/INS error-state EKF (extended Kalman filter) with closed-loop feedback (the gnss-ins pack); a tightly-coupled pseudorange update that keeps correcting with fewer than four satellites; a coupled clock + position filter; a general unscented (sigma-point) Kalman estimator for strongly nonlinear measurements; a tightly-coupled GNSS/INS UKF navigator (pseudorange + Doppler) whose force-model orbital coast is self-consistency-checked to 0.77 m RMS over a 30-minute curving LEO pass that includes a 120-second GNSS outage (a filter-consistency figure, not an external-oracle validation — this navigator stays MODELLED); and a full 17-state tightly-coupled GNSS/INS UKF (position, velocity, attitude error, accelerometer and gyro biases, clock bias and drift) whose quantum-CAI dead-reckoning coasts a 120-second outage on the cold-atom accelerometer's derived velocity-random-walk.
Orbit determinationRecovery of an orbital state [r, v] from ground-station range tracking, composing the two-body + J2 force model and RK4 integrator with a Gauss–Newton batch corrector (determine_orbit_batch, sub-metre / mm·s⁻¹ from noiseless ranges, ~2 m at a 5 m noise floor) and a sequential unscented-filter variant (determine_orbit_sequential).
Observability & estimation theoryA general, reusable Fisher-information / Cramér–Rao layer (src/fim.rs): the information matrix M = HᵀWH, the Cramér–Rao lower bound, observability rank and datum-defect null space (Moore–Penrose pseudo-inverse), and D/A/E/T-optimal experiment-design scalars from a symmetric Jacobi eigensolver. Validated — eigenvalues vs numpy.linalg.eigh, the CRLB covariance vs σ²(XᵀX)⁻¹ via numpy.linalg.inv, and GNSS DOP from the information matrix, all matched to 1e-9 (tests/fim_observability_reference.rs), and additionally cross-checked against the Kay (1993) closed-form bounds with Monte-Carlo CRLB attainment. It underpins the DOP engine, the passive-geolocation CRLB, and the lunar absolute-station observability theorem (below).
Lunar & cislunarAn Earth–Moon circular restricted three-body (CR3BP) propagator in the rotating frame — conserved Jacobi constant and all five Lagrange points (src/cr3bp.rs) — now with a 6×6 state-transition matrix (STM) and a single-shooting differential corrector (cr3bp_jacobian, propagate_state_stm, differential_correct_halo) that produces genuinely periodic halo / NRHO (near-rectilinear halo orbit) orbits: the STM is validated against finite differences, corrected orbits close to machine precision, and seeding the published apolune state reproduces the L2 southern 9:2 NRHO (L2 = the second Earth–Moon Lagrange point; the Gateway orbit) at period ≈ 6.57 d / perilune ≈ 3,250 km, consistent with the published ≈ 6.56 d / ≈ 3,370 km (a CR3BP — circular, Sun-free — solution, not validated against a real LANS (Lunar Augmented Navigation Service)/Gateway ephemeris; the selenocentric MCI/MCMF (Moon-centred inertial / Moon-centred, Moon-fixed) transform of the corrected orbit is a follow-on); plus LunaNet / LNIS (LunaNet Interoperability Specification) cislunar PNT geometry (MCI↔MCMF reduction, selenographic coordinates) with a lunar south-pole ARAIM pass that honestly surfaces the integrity gap: a ~30 m σ_URE (user range error) drives the protection level well above a 50 m alert limit (src/lunar.rs, scenarios/lunanet-araim.toml); and a surface-beacon DOP augmentation (src/lunar_beacon.rs) showing how a few surveyed surface ranging beacons supply the low-elevation, wide-azimuth line-of-sight rows an all-overhead orbit-only set lacks — collapsing the ill-conditioned south-polar GDOP and, via a root-sum-square error budget, the realized position accuracy in metres (reusing the gnss_lib_py-validated DOP kernel and the airless-horizon visibility closed form; the dilution-of-precision analysis is written up in arXiv:2607.06212).
Lunar PNT suiteA lunar/cislunar navigation suite layered on the CR3BP core, each a runnable kind: Lunar Coordinate Time (lunar-time-offset, src/lunar_time.rs — the secular LTC/TCL − TT rate (LTC = Lunar Coordinate Time; TCL = its French form, Temps-Coordonnée Lunaire) from the self-potential difference + kinetic term, reported with the published 56–59 µs/day band); a geodetic lunar VLBI (very-long-baseline interferometry) delay observable (lunar-vlbi, src/lunar_vlbi.rs — an Earth-baseline near-field two-range-difference delay + rate, cross-checked against the same-codebase plane-wave Δ-DOR (delta differential one-way ranging) in the far-field limit, partials finite-difference-verified); a joint multi-technique OD + clock batch estimator (lunar-joint-od-clock, src/lunar_combination.rs — a Gauss–Newton fit fusing VLBI + lunar-local ranges + inter-satellite ranges) carrying a Fisher-information observability result: internal ranging alone leaves a six-degree-of-freedom rigid-body datum defect, so a surface station's absolute position is unobservable until an Earth-frame tie is added — an Earth-baseline VLBI delay restores observability for a sparse constellation and sharpens the Cramér–Rao bound for a rich one, the absolute datum closing at three non-collinear Earth stations (the observability result written up in arXiv:2607.02566); reference-frame realisation (lunar-frame-realisation, src/lunar_frame_realise.rs — a 7-parameter Helmert datum fit + IAU 2015 WGCCRE orientation tie — WGCCRE = the IAU Working Group on Cartographic Coordinates and Rotational Elements); a Moonlight/LCNS-class service-volume analysis (LCNS = Lunar Communications and Navigation Services; moonlight-service-volume, src/lunar_service.rs — DOP / coverage / availability + a generalised lunar ARAIM HPL/VPL (horizontal/vertical protection level) envelope, reusing the gnss_lib_py-validated DOP kernel and the LunaNet σ_URE≈30 m machinery); lunar differential PNT (lunar-differential-pnt, src/lunar_dpnt.rs — a lunar differential-GNSS / satellite-based-augmentation-system (SBAS) analogue: exact common-mode clock cancellation + first-order spatial decorrelation vs baseline, reusing the DO-229E SBAS protection level — DO-229E being the RTCA (formerly the Radio Technical Commission for Aeronautics) minimum operational performance standard for SBAS receivers); and a LunaNet/IOAG-aligned interoperability export (IOAG = Interagency Operations Advisory Group; lunar-interop-export, src/lunar_interop.rs — CCSDS-OEM (Orbit Ephemeris Message) + lunar-time-scale round-trip in the IAU 2015 lunar body frame, wrapped in the KIF envelope). Evidence tiers per piece are in the verification matrix: Lunar Coordinate Time, the joint OD + clock estimator, reference-frame realisation and the service-volume geometry are VALIDATED (each against the independent oracle its row names, as is the VLBI delay's kernel path); the VLBI observable, the datum-defect observability result, differential PNT and the interoperability export are MODELLED. Parameters are illustrative public-source values — not validated against real VLBI/Gateway tracking, not affiliated with or endorsed by any agency, no TRL (technology readiness level) / heritage claim.
Deep-space & Mars PNTAn open radiometric navigation engine: iterative light-time + Shapiro relativistic delay, two-/one-/three-way Doppler & range (Moyer two-leg), coherent transponder turnaround ratios, regenerative/PN (pseudo-noise) ranging (CCSDS 414, the pseudo-noise ranging standard), and Δ-DOR plane-of-sky (CCSDS 506, the Delta-DOR standard), with solar-plasma/tropo/iono media; CCSDS-TDM (503) tracking-data-message parse + emit; a reduced-dynamic Square-Root Information Filter (RTN — radial, transverse, normal — empirical accelerations + a 3-state onboard clock + Mars atmospheric drag) that does Mars-LMO orbit determination to ≈ 0.2 m in a synthetic closed loop; a joint one-way + two-way fusion estimator; a multi-body dynamics core (Body{μ, re, zonals, gravity, IAU-pole}, Mars GMM-3 (Goddard Mars Model 3) gravity, an IAU body-fixed Mars frame, a pluggable EphemerisProvider seam, two-part Julian dates + TT↔TDB (Barycentric Dynamical Time)); and the mars-pnt relay-PNT scenario (a MARCONI areostationary relay constellation) with an end-to-end GSE performance simulator (GSE = ground-support equipment) (geometry → link budget → observables → SRIF → covariance). Simulation-validated (covariance / closed-loop figures of merit); the Sun-central Mars dynamics are cross-checked against JPL DE440 (137 m @ 1-day arc, xval/anise-mars-od). Real DSN/ESTRACK tracking-data validation is on the roadmap.
Solar system & any-body PNTA kernel-free whole-solar-system ephemeris (src/ephem.rs, src/ephem_provider.rs): every planet from the JPL Standish Keplerian elements (Table 1, 1800–2050 AD; Tables 2a/2b, 3000 BC–3000 AD) with each planet's published nominal error, the Earth and Moon split by the lunar series, and Phobos, Deimos, Io, Europa, Ganymede, Callisto and Titan from JPL mean elements and the IAU (International Astronomical Union) rotation model; any body relative to any other in the ICRF (International Celestial Reference Frame). Body now carries GM (gravitational parameter), radii, J2 (the second zonal harmonic) where published and the IAU pole and prime meridian for eighteen bodies. The solar-system kind reports positions, velocities, constants, light time and one-/two-way range between any two bodies (the existing radiometric light-time solver, with the solar Shapiro delay) and an orbit track per body — enough to draw an interactive solar system; the body-pnt kind positions an orbiter or a lander around any body (scenarios/mars-orbit-pnt.toml, scenarios/europa-surface-pnt.toml) with a local Walker constellation, the dilution-of-precision and Gauss–Newton machinery, and a deep-space range from Earth. Validated against JPL Horizons (DE441, JPL Development Ephemeris 441): Mercury–Saturn and the Earth from Table 1 within twice the nominal error (worst 1.87×), all eight planets from Tables 2a/2b (worst 1.71×), and the Earth–Mars/Jupiter light time. Modelled: Uranus and Neptune from Table 1 (2.0× and 5.2× the stated error against DE441), Pluto, the moons, and the body-pnt navigation results.
Fused MEO + LEO PNTsrc/leo_fusion/: system-agnostic LEO positioning, navigation and timing over any constellation (Walker shells, element sets, GNSS presets) and any signal (carrier, chip rate, C/N0 envelope, signal-in-space range error), with optional one-file presets carrying their sources (Xona Pulsar X1/X5, Iridium STL, Starlink signals of opportunity, CentiSpace, a representative C-band system, the ATOMIC zero-clock ephemeris model). leo-pvt: batch Doppler positioning from range rate (single- and multi-satellite, clock-drift and velocity states, single-pass along/cross-track geometry and the mirror solution), joint GNSS + LEO weighted least squares with per-system inter-system biases and caller-supplied per-signal sigmas, the DOP against the number of LEO satellites, polar and Arctic coverage, and LEO time transfer to UTC against C/N0 and the oscillator. leo-ppp: a float PPP (precise point positioning) EKF (extended Kalman filter) with GNSS only and with LEO, its convergence time and a chi-square NEES consistency test. ntn-positioning: 5G non-terrestrial-network positioning from the Cramér-Rao bound of the bandwidth. Validated: the LEO Doppler envelope against the published Iridium and Xona figures. Modelled: the rest, with the PPP trend compared against Li et al. (2019) — see docs/LEO-PNT-FUSION.md.
IntegritySnapshot and solution-separation (ARAIM-style) RAIM — receiver autonomous integrity monitoring — with horizontal/vertical protection levels (HPL/VPL), fault detection & exclusion, and Stanford integrity diagrams; an explicit integrity-risk-budget multiple-hypothesis solution separation (MHSS) protection level, including the dual-/multi-constellation constellation-wide fault mode (EU (European Union) ARAIM / DO-316, the RTCA performance standard for GPS airborne equipment with aircraft-based augmentation), exercised on a real GPS + Galileo snapshot (scenarios/araim-gps-galileo.toml). The protection level applies the one-sided nominal-bias projection `b_k = Σ_is_i·b_nomper fault mode and the **integrity** sigma σ_URA (user range accuracy; distinct from the accuracy σ_URE, user range error) from the Integrity Support Message — see [docs/ARAIM_REFERENCE.md](docs/ARAIM_REFERENCE.md). The detection kernel (the χ²/non-central-χ²/normal thresholds and K-multipliers) is **externally validated against SciPy** across 171 cases (tests/raim_reference.rs`); the geometry reuses the gnss_lib_py-validated DOP kernel. The ARAIM MHSS integrity-risk budget allocation itself has no published numeric oracle and stays honestly Modelled.
Augmentation (SBAS)SBAS / WAAS protection levels (WAAS = the Wide Area Augmentation System) in the DO-229E weighted-least-squares form (precision-approach and en-route K-factors) and the L1/L5 dual-frequency ionosphere-free combination (L1 and L5 being two GPS civil signal bands; IS-GPS-705, the GPS interface specification for the L5 signal, γ₁₅ ≈ 1.793) that underpins DO-316 — src/sbas.rs. The protection-level algorithm is externally validated against the RTKLIB SBAS-PL fork (RTKLIB = the open real-time-kinematic positioning library; PL = protection level) (zsiki/rtklib_ws waasprotlevels(), Siki & Takács 2017, DO-229D — the previous revision of DO-229 — App. J) run on real EGNOS data (European Geostationary Navigation Overlay Service), reproducing its HPL to < 2e-3 m (tests/sbas_reference.rs); gLAB (the GNSS Laboratory tool suite) v6.0.0 confirmed the identical convention.
Clock & timingTwo-state Kalman holdover (Joseph-form covariance, NIS/NEES — normalised innovation squared / normalised estimation error squared — consistency health); Allan-family stability (ADEV / MDEV / TDEV / HDEV / MTIE — Allan, modified Allan, time and Hadamard deviation, and maximum time interval error) with noise-type-specific confidence intervals and a full IEEE-1139 five-coefficient power-law fit (IEEE Std 1139, the Institute of Electrical and Electronics Engineers frequency-and-time metrology definitions) — the estimators are validated on real hardware against Stable32: a real 5071A caesium primary standard vs a hydrogen maser (556,990 phase samples, 16 averaging factors, OADEV/OHDEV — overlapping Allan/Hadamard deviation — to 1e-3; tests/cs5071a_reference.rs) and the canonical Stable32 PHASE.DAT regression series (139 averaging factors, OADEV/MDEV/TDEV to 1e-3; tests/phasedat_reference.rs); the ADEV/MDEV/TDEV estimators and the telecom MTIE wander metric are additionally cross-checked against the independent allantools 2024.06 library to < 1e-9 on the NIST SP 1065 series (tests/mtie_reference.rs, tests/mdev_tdev_reference.rs); geometric corrections (Sagnac, GNSS common-view); and the operational transfer methods — TWSTFT (two-way satellite time and frequency transfer) with the BIPM (International Bureau of Weights and Measures) Sagnac closed form, GNSS common-view, PPP (precise point positioning) ionosphere-free time transfer, a free-space optical link with turbulence scintillation, and an inverse-variance clock-ensemble (paper) timescale below the best contributing clock. A GNSS-denied clock-holdover calculator (src/holdover.rs) exposes the closed-form van-Loan coast-error growth as a holdover-to-threshold inversion — how long a clock free-runs before its timing error exceeds budget — across representative classical and quantum-clock classes; modelled (cross-checked against the multi-step clock_state covariance recursion), and honest that for a very stable clock the holdover to a tight threshold is set by the assumed long-tau noise floor, not the cited ADEV. A conditional Timing Protection Level (src/tpl.rs) extends holdover to spoofing: a bound on the undetected time error, given an independent cross-check, that composes a k-sigma monitor floor, the van-Loan coast variance over the detection latency, and a CUSUM (cumulative-sum) time-to-alarm. Calibrated on a real recorded spoof (JammerTest 2024) and reproducible via cargo run --example tpl_jammertest; MODELLED composition (no integrity-risk-per-hour budget), conditional on detection — there is no finite unconditional bound.
GNSS measurement domainForward pseudorange / Doppler synthesis with Klobuchar (broadcast) and IONEX / TEC-grid (IONosphere map EXchange format / total electron content; measured) ionosphere — including an IONEX file parser, time interpolation between maps, and the thin-shell slant-obliquity mapping — Saastamoinen + Niell troposphere, and snapshot RAIM (HPL/VPL).
ResilienceLink-budget jamming (J/S → effective C/N₀ → loss of lock — jammer-to-signal ratio, carrier-to-noise-density ratio — with the anti-jam spectral-separation factor Q now derived from the actual signal and jammer power spectra via src/navsignal.rs — Q = 1/(R_c·κ), cross-checked in CI against the previous representative constant); a stochastic time-spoof detector (Neyman–Pearson / χ²₁ energy test with closed-form and Monte-Carlo P_fa/P_md and a Security figure of merit (FoM) of 1 − P_md); and a multi-layer spoof detector fusing a RAIM-consistency parity test (with the common-mode blind spot modelled honestly), an RF AGC-power (automatic gain control) monitor, and a signal-quality (SQM — signal-quality monitoring, early-minus-late) monitor; and a quantum-inertial dead-reckoning error budget (QuantumNavBudget, src/inertial/quantum_imu.rs) composing the cold-atom-interferometer white-noise velocity-random-walk with residual bias (cross-checked against the independent AccelModel integrator) and scale-factor error into a position-drift-over-holdover figure — the inertial twin of the clock holdover. A framework-aligned resilience-scoring engine (src/resilience/) maps an architecture's simulated behaviour to per-dimension sub-scores across Kshana's own seven resilience categories (not DHS terms), aligned to the US Department of Homeland Security Resilient PNT Conformance Framework, then studies the decision-stability of any single composite score or maturity Level under a Dirichlet weighting simplex and a five-threat ensemble — Kendall-τ rank instability, top-1 winner flip rate, and common-mode diversity collapse (Hill-N2), with an integrity-hashed assurance report (35 hand-derived oracle tests). Reproducible via cargo run --example resilience_report; MODELLED synthetic architectures, a self-assessment aligned to RPCF v2.0, not a certification. See docs/RESILIENCE-CROSSWALK.md.
Passive RF geolocationTDOA/FDOA emitter geolocation (time-/frequency-difference of arrival; src/geolocation.rs) — locate a jammer or spoofer (or an opportunistic source for reverse-PNT) from time-difference-of-arrival hyperboloids across a receiver network, solved by Gauss–Newton least squares; adding frequency-difference-of-arrival with moving receivers jointly recovers the emitter's position and velocity, with the Cramér–Rao bound on the position covariance derived from the network geometry. MODELLED (internal-consistency oracles: forward→inverse round-trips, the J·CRLB = I identity, GDOP monotonicity, and the estimator attaining its own CRLB under Monte-Carlo) — a point-source line-of-sight model, no multipath / NLOS (non-line-of-sight), receiver-clock-bias, or refraction terms.
Nav-signal & code trackingThe signal level between the link budget and the measurement domain (src/navsignal.rs): unit-area power spectral densities (PSDs) for BPSK-R(n) (binary phase-shift keying with rectangular chips) and sine-BOC(m,n) (binary offset carrier); the spectral-separation coefficient (SSC) κ = ∫ G_s·G_i df, which derives the anti-jam Q the jamming model uses (Q = 1/(R_c·κ)) from the actual signal/jammer spectra instead of a representative constant; the RMS (Gabor) bandwidth (BOC > BPSK — the ranging-information / Cramér–Rao measure); the coherent early–late DLL code-tracking thermal-noise jitter (DLL = delay-lock loop; Kaplan & Hegarty; ~sub-metre for C/A — the GPS coarse/acquisition code — at 45 dB-Hz); and the multipath error envelope (coherent EML, early-minus-late — narrow-correlator suppression). Validated against closed-form anchors (BPSK self-SSC = 2/(3·R_c), unit-area PSDs, sub-metre C/A jitter). This is signal-performance analysis, not antenna / RF-payload hardware design (a payload partner's role).
InteroperabilityRINEX-3 multi-GNSS broadcast-ephemeris ingestion (GPS, Galileo, QZSS — Japan's Quasi-Zenith Satellite System —, BeiDou MEO/IGSO — medium Earth orbit / inclined geosynchronous orbit — via IS-GPS-200, the GPS interface specification; GLONASS, Russia's Global Navigation Satellite System, via PZ-90 — the Russian Parametry Zemli 1990 datum — state-vector RK4) usable as a constellation source (RINEX in, PNT geometry out); a RINEX-3 observation parser (pseudorange, carrier phase, Doppler, signal strength; the 4.00 observation layout is expected to parse but is untested, and RINEX 4 navigation files are refused by name rather than mis-decoded) that now feeds a single-point-positioning (SPP) solver (pvt) — real code observations in, a real receiver position out, validated on IGS data; an SP3-c/d precise-ephemeris reader/writer with 9th-order Lagrange interpolation; and CCSDS OEM 2.0 + OMM (Orbit Mean-elements Message) export for flight-dynamics tools (GMAT, Orekit, STK — Systems Tool Kit); and CCSDS-TDM (503) tracking-data-message parse + emit for deep-space radiometric tracking.
Mission analysis (systems engineering)First-order mission-design budgets, each a runnable kind: two-body launch & ascent geometry (launch-window — launch azimuth sin Az = cos i/cos lat, minimum inclination, Earth-rotation bonus, dogleg plane-change Δv, daily opportunities; src/launch.rs); an Allen–Eggers ballistic re-entry corridor (reentry — peak deceleration, peak-g velocity/altitude, peak-heating velocity; src/reentry.rs); Earth-observation coverage geometry (eo-coverage — swath / nadir GSD (ground sample distance) / off-nadir access / revisit via the SMAD (Space Mission Analysis and Design) space triangle; src/eo_payload.rs); a 3-DOF attitude & pointing error budget (three-degree-of-freedom; attitude-budget — worst-case gravity-gradient torque + RSS (root-sum-square) pointing budget; src/attitude_budget.rs); ground-station pass prediction (passes — AOS/TCA/LOS, acquisition of signal / time of closest approach / loss of signal, max elevation, access time; src/passes.rs); and a one-way link budget over the CCSDS 401 / DSN 810-005 link equation (the CCSDS radio-frequency and modulation standard / the Deep Space Network link design handbook; link-budget — FSPL (free-space path loss), C/N₀, Eb/N₀ (energy-per-bit to noise-density ratio), margin, closure; src/linkbudget.rs). MODELLED first-order analytic budgets — the pre-hardware layer below STK/GMAT/Basilisk, not a 6-DoF or radiometric replacement.
Decision analysis & trade-off (MCDA)A full multi-criteria decision-analysis (MCDA) suite (src/mcda/) spanning all four method families — value aggregation (WSM, WPM, WASPAS — weighted sum model, weighted product model, weighted aggregated sum product assessment), distance-to-ideal (TOPSIS, Technique for Order of Preference by Similarity to Ideal Solution), compromise programming (VIKOR, from the Serbian for multi-criteria optimisation and compromise solution), and outranking (PROMETHEE II, Preference Ranking Organization Method for Enrichment of Evaluations; ELECTRE I, from the French for elimination and choice expressing reality), plus ratio-system MOORA (Multi-Objective Optimization on the basis of Ratio Analysis) and proportional COPRAS (Complex Proportional Assessment) — with AHP (Analytic Hierarchy Process) pairwise-comparison priority weighting (Consistency Ratio), a Pareto non-dominated front, weight-sensitivity analysis, and multi-attribute utility scoring. The nine aggregators reproduce the independent third-party libraries pymcdm (WSM / WPM / WASPAS / MOORA / TOPSIS / VIKOR / PROMETHEE II) and pyDecision (ELECTRE I, COPRAS) to < 1e-9, and the AHP priority vector + Consistency Ratio match Saaty's Random-Index table and the SciPy/LAPACK principal eigensolver to < 1e-9 (tests/mcda_*_reference.rs). VALIDATED — the decision layer under the trade-study engine.
Space environmentA space-weather environment model (space-weather, src/space_weather.rs): solar (F10.7 / centred-81-day F10.7a — the 10.7 cm solar radio flux) and geomagnetic (Kp, the planetary K-index, with the definitional Kp↔ap table — ap being its linear planetary amplitude) activity indices, the Jacchia-1971 exospheric temperature they drive (validated vs published solar min/mean/max), and the activity-corrected vs static thermospheric neutral density at altitude — the solar-cycle density dependence the static USSA76 (US Standard Atmosphere 1976) atmosphere omits. MODELLED: a calibrated first-order scale-height coupling, not a data-validated (NRLMSISE — the US Naval Research Laboratory Mass Spectrometer and Incoherent Scatter Radar Exosphere model) atmosphere.
AI/ML evaluation & tradeAn RF-impairment detection evaluation testbed (impairment-eval, src/impairment_eval.rs): a labelled, parameter-grounded synthetic corpus (nominal / jamming / spoof-time / spoof-position / multipath), a detector-agnostic ROC/AUC (receiver operating characteristic / area under the curve) harness scoring any detector (energy \agc \sqm \parity \fused) with per-class Pd (probability of detection) at a target Pfa (probability of false alarm), and the in- vs out-of-distribution optimism gap (distribution-shift mode). Plus a quantum-vs-classical PNT trade (quantum-trade, src/quantum_trade.rs) quantifying a candidate clock's timing/inertial holdover benefit from a measured-ADEV curve vs a classical baseline, with the long-τ floor caveat carried on the artifact and a GNSS-denied resilience-vs-time envelope. The evaluation metrics (AUC / confusion / Pd-Pmd, Pmd being the probability of missed detection) are validated to an exact match against scikit-learn 1.9.0 — including on real ESA OPS-SAT telemetry (the OPSSAT-AD anomaly-detection dataset, Ruszczak et al. 2025, CC BY 4.0 — Creative Commons Attribution 4.0), where Kshana's Mann–Whitney ROC AUC reproduces scikit-learn's roc_auc_score to < 1e-9 on the held-out test split and a transparent peak-count detector separates the labelled anomalies at AUC ≈ 0.85 (tests/opssat_ad_reference.rs) — and the trade engine's numerical kernels (ADEV NNLS — non-negative least squares — fit, χ² consistency bands, van-Loan clock Q) against scipy 1.17.1; the device-benefit numbers built on top stay MODELLED operating characteristics — never field/IQ (in-phase/quadrature sample) data, no good/bad verdict. Building on the testbed, a deeper optimism-gap study (src/impairment_study.rs, impairment_ml.rs, eval_stats.rs) scores a 13-detector panel (energy/AGC/SQM/parity plus seeded logistic-regression and one-hidden-layer-MLP — multi-layer perceptron — detectors), fits in- vs out-of-distribution scaling laws with a permutation null, and learns a leave-one-out predictor of out-of-distribution degradation from in-distribution statistics (cargo run --example optimism_study). A software-defined-receiver front end (src/sdr.rs — raw IQ/IF (intermediate-frequency) → correlator early/prompt/late taps → SQM) and real-data ingest adapters (src/realdata/ — RINEX, u-blox UBX (the u-blox binary protocol), GnssLogger, JammerTest, Yunnan, SatGrid) let the same detectors run over recordings supplied locally (no datasets are committed). The quantum-vs-classical resilience crossover map under parameter uncertainty (src/crossover.rs; cargo run --bin crossover_study) regenerates the inertial and clock crossover studies behind the Results figures.
Quantum-Enabled PNT demonstratorThree runnable, MODELLED application areas behind the open engine, each emitting honest TradeEvidence + a representativeness / gaps-to-flight record (src/representativeness.rs): trusted quantum time transfer (quantum-time-transfer, src/timetransfer_chain.rs — an end-to-end optical-lattice-clock + photonic-link vs CSAC (chip-scale atomic clock) + RF two-way budget, with a reused timing protection level, a delay/replay-attack security FoM (1 − P_md), and clock-anomaly detection + CUSUM latency); GNSS-free quantum navigation (quantum-gnss-free-nav, src/quantum_nav_od.rs — a cold-atom-interferometer inertial coast vs a navigation-grade INS over a GNSS outage, honest that with no external fix the accelerometer bias is unobservable so the error still grows); and quantum-system fault/anomaly detection (quantum-anomaly-detect, src/quantum_faults.rs — a labelled fault catalogue with a bootstrap-CI (confidence-interval) ROC AUC from the externally-validated eval_stats and a minimum-detectable-fault at a fixed false-alarm rate). A shared quantum device error-model library (src/quantum_devices.rs) and a unified quantum-vs-classical trade harness (src/qtrade.rs) underpin them. The validated kernels they ride (eval-metrics vs scikit-learn, trade kernels vs scipy) are reused; the device-benefit numbers built on top stay MODELLED — illustrative public-source device/link parameters, models the class, no TRL / flight heritage / certification, no agency endorsement.
Frugal engineering & integrity impactA cost-per-coverage ROI (return on investment) lens (src/frugal.rs) — cost per unit of delivered coverage for an architecture trade — and a detection-miss → integrity-impact mapping (src/integrity_impact.rs) that turns a monitor's missed-detection rate into its integrity-risk contribution. MODELLED decision-support budgets, additive.
Artifact interchangeThe Kshana Interchange Format (KIF) (src/interchange.rs) — a versioned, self-describing envelope wrapping a scenario result with its kind, schema version, and MODELLED/VALIDATED labels, so a stored artifact stays self-documenting and older envelopes remain forward-compatibly readable.

Each capability is reachable as a Rust API, a runnable scenario kind, or both. Maturity per capability — validated, runnable, or library — is tracked in docs/CAPABILITY.md. A machine-checked verification matrix (src/verification.rs) renders the requirement → module → test → oracle → status cross-reference, with unit-tested honesty invariants that permit a validated label only where an independent external oracle backs it — and that record the hardware/PA (product-assurance) capabilities Kshana deliberately does not provide.

The four sensor packs, as first published (results)

Results

Each scenario compares a quantum sensor against its classical counterpart through a ~1.8 h GNSS outage. Numbers are reproducible (scenario + seed + version).

What quantum sensors buy when GNSS is gone — clock-holdover · seed 42 · drawn at engine 0.39.0, and every figure above re-checked against the current engine on each build by tests/published_figures_still_reproduce.rs · SVG

The advantage is outage- and vibration-dependent, with an explicit break-even where classical wins — shown honestly across the technology-readiness ladder (optical-clock figures are ground-demonstrator targets; no strontium optical clock has flown):

Quantum-vs-classical resilience crossover — clock holdover TRL ladder (top) · inertial advantage map with break-even contour (bottom). Regenerable via cargo run --release --bin crossover_study.

Dead-reckoning position error during a GNSS outage: the quantum sensor (blue) stays flat near the spec; the classical sensor (red) diverges to tens of kilometres. Generated by Kshana from scenarios/imu-deadreckoning.toml.

PackScenarioQuantumClassical
1 — Clock holdoverclock-holdover.toml (20 ns spec)optical clock holds the full outageCSAC breaches the spec mid-outage
2 — Inertial dead-reckoningimu-deadreckoning.toml (100 m spec)cold-atom: ~41 m, holds full outagenav-grade: breaches in ~350 s → tens of km
3 — Time transfer (optical inter-satellite link)timetransfer.tomloptical: ~0.3 mm rangingRF (TWSTFT): ~150 mm ranging
4 — Hybrid fusion (capstone)hybrid-pnt.tomlfull position+timing for the whole outageposition-limited at ~350 s

The capstone shows the fusion thesis: optical inter-satellite time-transfer keeps even a classical clock locked, isolating the inertial sensor as the classical suite's weak link — i.e. quantum inertial + optical timing together.

Clock holdover through a GNSS outage: the optical clock (blue) stays inside the 20 ns spec for the full coast; the chip-scale clock (red) breaches it part-way. Generated by Kshana from scenarios/clock-holdover.toml.

A further scenario, orbit-gnss-challenged.toml, derives GNSS availability from orbital geometry rather than hand-authored windows: a spacecraft inside the GNSS shell is propagated against a GPS-like Walker constellation, and the visible-satellite count (line-of-sight, Earth-occultation, elevation mask) sets the fix state at each step. Over a day the user is in fix only ~59% of the time; the quantum clock holds a 5 ns timing solution through every gap (availability 1.0), the chip-scale clock only ~0.83.

Timing error over a day with GNSS availability derived from orbital geometry: the visible-satellite count (line-of-sight, Earth-occultation, elevation mask) sets the fix state at each step, so the clock must coast every gap — the optical clock holds the 5 ns spec while the chip-scale clock breaches it. Generated by Kshana from scenarios/orbit-gnss-challenged.toml.

The constellation can also be given as real two-line element sets (TLEs). A full TLE (line 1 + line 2) is propagated with the full SGP4/SDP4 model — including atmospheric drag and the deep-space lunar-solar and 12 h / 24 h resonance terms that matter for ~12 h GNSS orbits — validated against the official AIAA 2006-6753 vectors to a worst-case ≈ 4 mm. scenarios/orbit-sgp4-gps.toml ships a real Celestrak gps-ops snapshot of the operational GPS constellation (2021-07-28, 30 satellites) and requires valid TLE checksums — two-line element sets are open data from the US Space Force / 18th Space Defense Squadron catalogue, redistributed by Celestrak (Dr T. S. Kelso, celestrak.org); refresh with scripts/fetch_tles.sh. A line-2-only block keeps the analytic two-body propagation (scenarios/orbit-real-tle.toml); the two forms can be mixed in one constellation. A constellation can equally be built from a block of RINEX-3 GPS broadcast-ephemeris records — the format a receiver decodes — propagated by the IS-GPS-200 user algorithm and fed through the same geometry (scenarios/orbit-rinex.toml).

What it is / is not, in full

What it is / is not

It is: a deterministic, dependency-light engine spanning the PNT stack — orbit geometry, inertial navigation, GNSS/INS fusion, integrity, clocks, and timing. It runs a scenario (often a GNSS outage), evolves calibrated sensor error models through the appropriate estimator, and scores the result against the operational figures of merit — emitting a reproducible JSON (JavaScript Object Notation) result and an SVG chart, from a Rust library, a command-line interface (CLI), a Python extension, an in-browser WebAssembly module, a Model Context Protocol (MCP) server for AI agents, or a JetBrains IDE (integrated development environment) plugin.

It is not: flight hardware, a quantum-payload design, a full GNSS signal receiver, a radio-frequency (RF) signal simulator or hardware-in-the-loop rig, or a certified avionics product — and it does not replace MATLAB/Simulink, STK (Systems Tool Kit) or Orekit; it sits next to them and exchanges files with them. Quantum-hardware fidelity comes from published error models, not from this tool. The granular maturity of each capability is documented in docs/CAPABILITY.md.

It is not (yet): a full atom-interferometry physics engine (most quantum sensors consume published Allan/noise-budget coefficients; the CAI (cold-atom interferometer) accelerometer has a first-principles layer — Mach–Zehnder phase, projection noise, contrast decay, and vibration coupling, plus Coriolis and light-shift systematics — but wavefront systematics and fringe-ambiguity resolution remain a P2 (roadmap phase 2, the quantum physics layer) roadmap layer, see ROADMAP.md and docs/QUANTUM-MODELS.md); a certified or hardware GNSS receiver (it solves a single-point PVT (position, velocity and time) position fix from real RINEX (Receiver Independent Exchange Format) code observations — validated on real IGS (International GNSS Service) data — and its IQ layer (kshana iq, since 0.31.0) acquires and tracks recorded or generated baseband samples in software, as an analysis receiver: it does not drive radio hardware or transmit, is not a certified receiver, and does no carrier-phase positioning (RTK or PPP)); or a full mission-design suite (it has Lambert / porkchop / maneuver / orbit-determination building blocks, but is the performance-simulation layer above GMAT (General Mission Analysis Tool)/Orekit, not a replacement). Owning this scope is deliberate. If you need first-principles cold-atom interferometer error budgets (e.g. CARIOQA-PMP-grade — Cold Atom Rubidium Interferometry in Orbit for Quantum Accelerometry, Pathfinder Mission Preparation — or X-37B-style validation), see the P2 roadmap and get in touch to collaborate.

Low-Earth-orbit navigation

Low-Earth-orbit (LEO) satellites pass fast and loud. The leo-pnt-chain kind follows one system through every stage: the signal, the pass and its link, the navigation message, and the fused position, velocity and time (PVT) fix and precise point positioning (PPP). Each stage hands its numbers to the next. See docs/LEO-PNT.md.

Every scenario kind by family

The engine's scenario kinds, filed under families. Each family has a page with one entry per kind (the engine's description and fields, an example command, headline numbers from a run, the verification matrix rows that name it, and the chart the engine itself writes) and a contact sheet of those charts; docs/KINDS.md indexes them all. The table is written by tools/gen_readme_blocks.py and the pages by tools/gen_kinds_index.py, and both fail if the engine gains a kind no family names.

FamilyWhat it answersKindsRun one
Clocks, timing and holdoverhow long a clock keeps time without GNSS, and how a timing system holds up against its masksclock, sweep, sweep-nd, telecom-timing, slot-timing, timetransfer, time-transfer-budget, holdover-test, quantum-time-transferkshana scenarios/clock-holdover.toml
Inertial, fusion and quantum sensorsdead reckoning and sensor fusion through a GNSS outage, with classical and quantum sensorsinertial, hybrid, fusion, hybrid-ukf, gnss-ins, ins-trn-coast, quantum-gnss-free-nav, quantum-anomaly-detect, quantum-tradekshana scenarios/gnss-ins.toml
GPS-denied alternative PNTnavigating from gravity, terrain and other fields when GNSS is gonegravity-map, terrain-nav, terrain-slam, combined-altpnt, conflict-resiliencekshana scenarios/combined-altpnt.toml
Constellations, coverage and geometrywhere satellites are, who sees them and how good the geometry is, around the Earth, the Moon or Marsorbit, ephemeris, constellation-design, solar-system, body-pnt, mars-pnt, passeskshana scenarios/orbit-gnss-challenged.toml
GNSS measurements, positioning and integritypseudoranges, position fixes, protection levels and the space environmentintegrity, gnss-sim, pvt, araim-reference-check, space-weather, realtime-frame-eopkshana scenarios/integrity-raim.toml
Jamming, spoofing and the spectrumhow interference reaches a receiver and whether it is detectedjamming, spoof, spoof-detect, tracking-loop, spectrum, impairment-evalkshana scenarios/jamming-demo.toml
Low-Earth-orbit navigationa pass, a link, a navigation message and a fused fix, stage by stageleo-signal, leo-pass, leo-navmsg, leo-pvt, leo-ppp, ntn-positioning, leo-pnt-chainkshana scenarios/leo-pnt-end-to-end.toml
Lunar and cislunarnavigation, time, frames and geodesy at the Moonlunar-integrity, lunar-time-offset, lunar-time-budget, lunar-vlbi, lunar-vlbi-fim, lunar-joint-od-clock, lunar-frame-realisation, lunar-frame-campaign, lunar-llr-datum, moonlight-service-volume, lunar-differential-pnt, lunar-station-coverage, lunar-beacon, lunar-interop-export, cislunar-observability, cislunar-arc-recovery, lunar-attack-surface, lunar-jamming, earth-gnss-lunar, lunar-infrastructurekshana scenarios/lunar-infrastructure-od-consistency.toml
Space-user navigationGNSS signals for spacecraft above, around and beyond the GNSS orbitsgnss-ssvkshana scenarios/gnss-ssv-shell.toml
Optical PNToptical links through the atmosphere and optical-plus-RF figures of meritoptical-atmosphere, hybrid-optical-rfkshana scenarios/optical-atmosphere-network.toml
Mission analysis, links and space operationslaunch, ascent, entry, attitude, links, contact planning and file formatslaunch-window, ascent-losses, reentry, entry-heating, eo-coverage, eo-radiometry, attitude-budget, aocs, link-budget, acm-link, contact-schedule, aperture-duty-cycle, space-packet, oem-interopkshana scenarios/launch-window.toml
Campaignschained missions, sweeps and ensembles built from the other kindscampaignkshana scenarios/campaign-jam-spoof-holdover-integrity.toml
Every command

kshana <scenario.toml> runs a scenario; every other command is a subcommand, and kshana --help prints the usage of all of them. The commands are --study, --validate, kinds, example, receiver-trust (with live and evidence), evidence (keygen, verify, attach-timestamp, round-trip), jammertest (import, score), trust-telemetry, imu-fit, nmea-scenario, interference-map (adsb, ais, daily, sensitivity, fetch-land), route-exposure, bench (spec, truth, cases, score, baseline, seal, reveal-check, manifest, verify-manifest, validate, leaderboard), bench-export, compliance-report, lunanet-afs-check, standards-pack, osnma, iq (scene, acquire, track, sweep, labfit, campaign, conditions, frontend, monitor, inventory, info, extract, convert, decimate), sky and skyline. docs/COMMANDS.md gives each one's purpose, a verified example and its docs page.

Every surface

One engine, the same results everywhere: the command line, the Rust library, Python, JavaScript and WebAssembly, the MCP server with its plugin commands and skills, Kshana Studio (every page runs in the browser, no install, nothing uploaded), the ROS 2, Signal K, OpenCPN, GNSS-SDR and gnss_lib_py integrations, the systemd, Docker and Grafana deploy kits, and the JetBrains plugin. docs/ALL-SURFACES.md lists them with how to get each and the names of all the plugin commands, skills and Studio pages; docs/SURFACES.md says, for every command and kind, which surface carries it and which do not, with the reason.

How a run works

A scenario is a TOML (Tom's Obvious, Minimal Language) file: a kind, a seed and the parameters. The engine runs it and writes the result, a chart and a report beside it, and the exports you ask for.

This bundled scenario runs 2 h: 10 min of GNSS, then about 1.8 h with GNSS denied. It asks how long a strontium optical lattice clock and a chip-scale atomic clock (CSAC) each hold time to within 20 ns.

kshana example clock-holdover > clock-holdover.toml
kshana clock-holdover.toml
scenario 5ba83a232b94 | quantum holdover 6600s p95 1.20e-4ns integrity 1.000 security n/a (no attack) | classical holdover 2610s p95 19.7ns integrity 1.000 security n/a (no attack)
wrote clock-holdover.result.json, clock-holdover.chart.svg, clock-holdover.report.html, and clock-holdover.report.json

The optical clock holds the 20 ns budget for the whole 6600 s outage; the CSAC holds it for 2610 s, and is inside the budget for 95.6% of the run against 100% for the optical clock. kshana example lists every bundled scenario.

Missions

Ten sectors ask ten different questions of the same engine. Each has bundled scenarios to start from.

SectorStart with
Defence and securitycampaign-jam-spoof-holdover-integrity, spoof-meaconing
Space, Earth orbitorbit-gnss-challenged, leo-pnt-end-to-end
Moon, Mars and deep spacelunar-relay-constellation, mars-orbit-pnt
Aviation and dronessmall-uas-jammed-nav, araim-gps-galileo
Maritimemaritime-strait-jamming, maritime-port-approach-coast
Roadautomotive-urban-canyon
Railrail-tunnel-coast
Critical infrastructure and timingclock-holdover, clock-ensemble
Telecom and 5G (the fifth generation of mobile networks)telecom-prtc-holdover-24h, leo-vertical-5g-network-timing
Science and researchsweep-clock-stability, quantum-pnt-demonstrator.suite

The question each sector asks

SectorThe question it asksStart with
Defence and securityHow long do our navigation and timing stay trustworthy under jamming and spoofing, and which layers keep us in spec?campaign-jam-spoof-holdover-integrity, spoof-meaconing
Space: Earth orbitDoes my spacecraft see enough navigation satellites, how long does its clock hold time between fixes, and what would a low-orbit navigation layer add?orbit-gnss-challenged, leo-pnt-end-to-end
Lunar and deep spaceWill a lander, rover or orbiter at the Moon, at Mars or further out get a trustworthy position and time?lunar-relay-constellation, mars-orbit-pnt
Aviation and dronesAfter a jammer takes GNSS away, how long does my uncrewed aircraft system (UAS) stay inside its position budget, and is integrity available on my route?small-uas-jammed-nav, araim-gps-galileo
MaritimeHow far across the water does a jammer reach, would a position push be caught, and how long can a ship coast into port?maritime-strait-jamming, maritime-spoof-position-push, maritime-port-approach-coast
Road and automotiveHow far does a car drift under an overpass or past a roadside jammer?automotive-urban-canyon
RailHow many seconds into a tunnel can a train still tell which track it is on?rail-tunnel-coast
Critical infrastructure and timingIf GNSS time is lost or spoofed, how long do a power grid, a trading venue or a data centre keep traceable time?clock-holdover, clock-ensemble
Telecom and 5GIf the GNSS time reference is lost, does my network clock stay inside the ITU-T masks, and for how long?telecom-prtc-holdover-24h, leo-vertical-5g-network-timing
Science and researchCan I reproduce, extend and cite a PNT result, down to the seed?sweep-clock-stability, quantum-pnt-demonstrator.suite

Evidence

176 of 388 capabilities validated against independent external oracles; 208 honestly labelled Modelled. Each row of the verification matrix names a capability, the oracle it is checked against, the test that runs the check, and the label that follows. Continuous integration (CI) makes it impossible to call a capability VALIDATED without an independent external oracle.

LabelRowsMeaning
VALIDATED176an independent external oracle agrees: real data, an independent implementation or published reference vectors
MODELLED208checked against analytic truth or simulation self-consistency, and said out loud
PARTNER4owned by a hardware partner; Kshana holds no oracle for it

A few of the checks: all 666 AIAA (American Institute of Aeronautics and Astronautics) 2006-6753 SGP4 (Simplified General Perturbations 4) vectors to 4.12 mm; the Cowell force model to 0.08 m against Orekit 12.2; Galileo to 0.61 m and Swarm-A to 0.10 m against real precise ephemerides of the European Space Agency (ESA). Tests hold near 95 % line coverage of src/, gated at 85 % in CI. The ledger is docs/VERIFICATION-MATRIX.md, generated from src/verification.rs: the full 388-row matrix, and why each Modelled row has no external oracle in docs/MODELLED-RATIONALE.md.

How validation works, the curated highlight table and the evidence figures

Validation, reproducibility & honesty
  • Every noise term is calibrated to a published, cited figure and validated against the standard relation (Allan deviation for clocks; Groves' dead-reckoning error growth for inertial; the timing→ranging conversion for time transfer). Status per term is tracked in docs/VALIDATION.md as validated or not modeled — nothing is presented as validated that is not.
  • Reproducible by construction: scenario + seed + engine version → identical bits. scripts/check-reproducible.sh enforces it; quantum and classical runs use independent seeds so their noise is uncorrelated.
  • Maturity is stated honestly: optical-clock and optical-link figures are targets / ground-demonstrator results, not flown.
Validation at a glance

Every row is enforced by a named test in CI. This table is a curated highlight; the full machine-checked matrix is 388 rows — 176 VALIDATED, 208 MODELLED, 4 PARTNER (src/verification.rs), with the complete evidence (and what is honestly not yet validated) in docs/VALIDATION.md and the per-release kshana-validation-summary.html artifact (generated by cargo run --bin validation_report, SLSA-attested — Supply-chain Levels for Software Artifacts).

The Status column states the kind of evidence, matching the validation ladder above: VALIDATED = checked against an independent external oracle (real data, an independent library, or published reference vectors); MODELLED = checked against analytic truth or simulation self-consistency (no independent external dataset). VALIDATED describes the method of checking, not a pass/fail — an honest miss against a real external oracle stays VALIDATED, while a comparison that no matrix row names as an oracle (the LRO — Lunar Reconnaissance Orbiter — fit above) is shown as MODELLED. CI rows are process guards, not figures of merit. A few real-data islands (the measured caesium clock, Stable32 PHASE.DAT, and the OPS-SAT/ICGEM checks where the raw inputs carry no redistribution licence) are data-gated: the test prints a skip notice and stays green when the input is absent, and the public reference numbers are committed under tests/fixtures/. Reproduce the raw inputs with the matching scripts/fetch_*.sh.

StatusCapabilityAgreementReference / oracle
VALIDATEDSGP4/SDP4 propagation666/666 vectors, worst 4.12 mmAIAA 2006-6753 (Vallado tcppver.out) + head-to-head vs the independent sgp4 crate
VALIDATEDReference frames — IAU 2000A/B nutation, IAU 2006/2000A CIO chain, ERAbit-for-bit (X,Y to 1e-14, s to 1e-18, ERA to 1e-12)ERFA/SOFA eraXys06a · eraC2ixys · eraEra00 · eraNut00a/b
MODELLEDGCRS→ITRS vs an independent SPICE enginemax 0.028″ → ≤ 0.86 m ground, ≤ 3.6 m GNSS orbitANISE (pure-Rust NAIF/SPICE), same IERS finals2000A EOP, 8 epochs 2020–2023 (compared against this reference; no verification-matrix row names it as an external oracle, so it is not labelled VALIDATED)
MODELLEDEGM2008 geopotential (degree/order 70)acceleration = ∇V to < 1e-6; zonal collapse to validated J2NGA EGM2008 coefficients + analytic ∇V identity
VALIDATEDGravity-functional synthesis (gravity-aided / GNSS-free nav map)GRS80 Somigliana + γ_e/γ_p to 3.5e-12; real EGM2008 disturbance map physical (RMS ≈ 26 mGal, d/o 70)GRS80 (Moritz 1980, IAG — International Association of Geodesy) Somigliana normal gravity + real ICGEM EGM2008 (tests/icgem_gravity_reference.rs)
VALIDATEDAllan estimators (ADEV/MDEV/TDEV/HDEV) + confidence bandsreproduce reference deviations; χ² bands matchNIST SP 1065 (Riley), 1000-point Table 31/32
VALIDATEDAllan estimators on a real measured caesium clockOADEV/OHDEV to 1e-3 (observed ≤ 3e-5), 16 averaging factorsStable32 on a real 5071A Cs vs H-maser, 556,990 pts (tests/cs5071a_reference.rs, data-gated)
VALIDATEDAllan estimators on the canonical Stable32 PHASE.DATOADEV/MDEV/TDEV to 1e-3 (observed ≤ 5e-5), 139 averaging factorsStable32 reference deviations for PHASE.DAT (tests/phasedat_reference.rs, data-gated)
MODELLEDIMU error model — ARW / VRW / bias-instabilityrecovered to < 5 % (bias-instability < 15 %)Analog Devices ADIS16465 datasheet; NaveGo reference profile
VALIDATEDNumerical Cowell propagator + force model (conservative tiers)worst position error 0.08 m over 24 h, 278 epochs (LEO + GTO)Orekit 12.2 NumericalPropagator/DormandPrince853 (CS GROUP), tests/numerical_cowell_propagator_reference.rs
MODELLEDCowell drag tier + absolute Sun/Moon-ephemeris & density inputsdrag tier characterised ≈ 333 m / 24 h; unperturbed matches universal-variable Kepler sub-m, energy/momentum ~1e-9built-in low-precision ephemeris + analytic Kepler
MODELLEDLambert · Tsiolkovsky · porkchopround-trip to two-body truth; ΔV < 0.01 %Izzo 2015 · rocket equation · analytic Hohmann floor
MODELLEDOrbit determination (Gauss–Newton batch)sub-m / mm·s⁻¹ noiseless; ~2 m at a 5 m noise floortwo-body + J2 over an RK4 arc
MODELLEDForce-model fit vs Galileo precise ephemeris (full-arc)0.61 m 3-D RMS, 24 h, d/o-70, force-onlyESA/ESOC ESA0MGNFIN final orbit (E11), real finals2000A EOP (compared against this reference; no verification-matrix row names it as an external oracle, so it is not labelled VALIDATED)
MODELLEDForce-model fit vs Swarm-A precise ephemeris (reduced-dynamic)0.10 m 3-D RMS (empirical-tier bound, not a measure)ESA SW_OPER_SP3ACOM_2_ precise orbit (compared against this reference; no verification-matrix row names it as an external oracle, so it is not labelled VALIDATED)
MODELLEDForce-model fit vs LRO lunar (honest miss)6.67 m reduced-dynamic, above the 5 m targetJPL Horizons LRO (NAIF −85) + GRAIL (Gravity Recovery and Interior Laboratory) GRGM660PRIM (compared against this reference; no verification-matrix row names it as an external oracle, so it is not labelled VALIDATED)
MODELLEDDeep-space Mars OD (reduced-dynamic SRIF)≈ 0.2 m Mars-LMO (simulation FoM, not real-mission)synthetic closed-loop OD — estimator-machinery validation
MODELLEDSun-central Mars dynamics vs JPL DE440137 m @ 1-day arc (grows with arc = unmodelled n-body)JPL DE440 via ANISE (xval/anise-mars-od, kernel-gated) (compared against this reference; no verification-matrix row names it as an external oracle, so it is not labelled VALIDATED)
VALIDATEDSingle-point positioning vs a surveyed IGS coordinate (real observations)5.7 m 3-D RMS / 1.1 m horizontal, dual-frequency iono-free code SPPIGS station ABMF survey + GPS broadcast ephemeris, 2018-05-13 (tests/pvt_abmf.rs)
MODELLEDTightly-coupled GNSS/INS UKF0.77 m RMS over a 30-min LEO pass incl. a 120 s outageforce-model coast, hand-derived
MODELLEDGPS-denied gravity-map navigation~70 km INS drift → ~145 m recoveredESA NAVISP Quantum Wayfarer target
MODELLEDTerrain-referenced navigation (TERCOM/SITAN)70 km drift → < 500 m (grid-resolution floor ~140 m)SRTM .hgt DEM; hand-injected drift (non-circular check)
MODELLEDIGRF-14 main field (degree/order 13)pole ~80.7°N, dipole ~29.7 µT, physical 22–67 µT bandIAGA (International Association of Geomagnetism and Aeronomy) igrf14coeffs.txt (Schmidt semi-normalised)
MODELLEDNav-signal modulation & code trackingBPSK self-SSC = 2/(3·R_c); unit-area PSDs; sub-metre C/A DLL jitter @ 45 dB-HzClosed-form SSC/PSD anchors + Kaplan & Hegarty DLL thermal-noise formula
MODELLEDCR3BP halo/NRHO differential correctorSTM = finite differences; orbit closes to machine precision; L2 9:2 NRHO ≈ 6.57 d / perilune ≈ 3,250 kmfinite-difference STM check + published L2 southern 9:2 NRHO (≈ 6.56 d / ≈ 3,370 km) — CR3BP, not a real Gateway ephemeris
MODELLEDARAIM dual-constellation integrityconstellation-wide fault mode on real GPS + GalileoEU ARAIM TR (technical report) / DO-316; Celestrak gps-ops 2021-07-28 (compared against this reference; no verification-matrix row names it as an external oracle, so it is not labelled VALIDATED)
VALIDATEDGNSS geometry / DOP (GDOP/PDOP/HDOP/VDOP/TDOP)match to 1e-6 relative across 8 geometries (well-conditioned → near-singular)gnss_lib_py 1.0.4 (Stanford NAV Lab) — independent library (tests/dop_reference.rs)
VALIDATEDML detector-evaluation metrics (AUC/ROC/confusion/Pd-Pmd/precision/F1)exact counts + < 1e-9 over 5 datasets × 24 thresholdsscikit-learn 1.9.0 (Pedregosa et al., JMLR — Journal of Machine Learning Research — 2011) — independent library (tests/eval_metrics_reference.rs)
VALIDATEDAnomaly-detection ROC AUC on real ESA OPS-SAT telemetryAUC reproduces scikit-learn to < 1e-9; peak-count detector AUC ≈ 0.85 on the labelled test splitscikit-learn roc_auc_score on the OPSSAT-AD test split (Ruszczak et al. 2025, CC BY 4.0) — real OPS-SAT telemetry (tests/opssat_ad_reference.rs)
VALIDATEDQuantum-trade numerical kernels (ADEV NNLS fit · χ² consistency bands · van-Loan clock Q)NNLS + Q exact; χ² < 5e-4 at operating dof ≥ 48scipy 1.17.1 — optimize.nnls / stats.chi2.ppf / linalg.expm (tests/scipy_reference.rs)
VALIDATEDMTIE / MDEV / TDEV telecom wander metrics (ITU-T G.810/G.823/G.8261/G.811 — the International Telecommunication Union's Telecommunication Standardization Sector recommendations)MTIE (9 averaging factors, bit-exact) and MDEV + TDEV (8 factors, < 1e-9 relative) on the NIST SP 1065 LCG (linear congruential generator) seriesallantools 2024.06 mtie / mdev / tdev — independent library (tests/mtie_reference.rs, tests/mdev_tdev_reference.rs)
VALIDATEDMCDA trade-study methods — all four decision families, nine externally-validated aggregators (WSM · WPM · WASPAS · MOORA · COPRAS · TOPSIS · VIKOR · PROMETHEE II · ELECTRE I) plus AHP pairwise-comparison priority weightingscores / rankings / concordance matrices reproduced to < 1e-9pymcdm + pyDecision (independent third-party MCDA libraries) + Saaty RI (Random Index) / SciPy-LAPACK eig (tests/mcda_*_reference.rs)
VALIDATEDLEO Doppler envelope from the orbit and carrierIridium maximum within 5 % of the published ±36 kHz; Xona Pulsar X1 inside the published 32–34 kHzRNTF LEO PNT test results; Leclère, Marathe & Reid, arXiv:2509.19551 (tests/leo_doppler_reference.rs)
MODELLEDPPP convergence with LEO augmentation7.4 → 4.8 / 3.2 / 2.7 / 2.3 min with 60 / 96 / 192 / 288 LEO satellites, monotone; filter NEES inside the χ² bandtrend compared with Li et al., J. Geod. 93:749 (2019) (9.6 → 7.0 / 3.2 / 2.1 / 1.3 min); constellations and noise not reproduced
MODELLEDConditional Timing Protection Level (holdover-limited undetected time error under spoofing)composition reproduces the multi-step clock_state covariance recursion; calibrated on a real recorded spoofJammerTest 2024 (Zenodo 15911589) scalars + van-Loan / CUSUM closed forms (examples/tpl_jammertest)
MODELLEDPNT-resilience scoring + decision-instability35 hand-derived oracle tests; byte-deterministic study artifact (fixed seed)DHS RPCF v2.0 mapping + Dirichlet / Kendall-τ / Hill-N2 closed forms — synthetic architectures, not a certification
MODELLEDRF-impairment optimism-gap study (scaling laws + leave-one-out predictor)permutation-null significance; byte-deterministic artifact (5 seeds)synthetic parameter-grounded corpus — the eval metrics are VALIDATED vs scikit-learn (above); the study is MODELLED
CICross-platform reproducibilitybit-identical input + shape goldens on 3 OSes (operating systems)Linux / macOS / Windows CI matrix, SHA-256 goldens
CITest coverage~95 % line on src/ excluding src/*_data.rs and src/main.rs, gated ≥ 85 %cargo-tarpaulin (LLVM engine)

How a capability earns its label — the CI-enforced invariant: no external oracle ⇒ cannot be Validated · SVG

Top: every Validated row is backed by an external dataset, by construction. Bottom: SGP4 matches the official reference in every regime (worst 4.12 mm). SVG · SVG

176 Validated · 208 Modelled · 4 Partner — SVG

Capability domains

Every capability of the public map, by domain, with its ledger label. The domain table is written by tools/gen_readme_blocks.py from web/capabilities.json, the same file the Studio's map of everything reads.

The full table, domain by domain with every capability and its label, is docs/CAPABILITY-DOMAINS.md.

Install

One line gets the command-line tool: cargo install kshana. Every channel ships v0.39.0 from the same tagged commit.

ChannelInstallGuide
Try in the browseropen https://kshana.devStudio guide
Command line (Rust)cargo install kshanaCommand-line usage
Rust librarycargo add kshanaAPI reference on docs.rs
Pythonpip install kshanaPython API guide
JavaScript and WebAssemblynpm install kshananpm and WebAssembly guide
AI assistant (MCP server, cargo)cargo install kshana-mcpMCP server guide
Docker imagedocker run --rm -i ghcr.io/ashfordeou/kshana-mcpMCP server guide: Docker
Claude Desktop extensiondouble-click the .mcpb for your system: macOS (Apple silicon) · macOS (Intel) · Windows · Linux (x86-64) · Linux (Arm)Every MCP install snippet
Cursor (one click)Add to Cursor (npx) · Add to Cursor (Docker) · npx -y kshana-mcp@0.39.0Every MCP install snippet
VS Code (one click)Install in VS Code (npx) · Install in VS Code (Docker) · npx -y kshana-mcp@0.39.0Every MCP install snippet
Claude Codeclaude mcp add kshana -- npx -y kshana-mcp@0.39.0Every MCP install snippet
npxnpx -y kshana-mcp@0.39.0Every MCP install snippet
uvx / pipxuvx kshana-mcp==0.39.0Every MCP install snippet
Homebrewbrew install ashfordeOU/tap/kshana-mcpEvery MCP install snippet
Scoopscoop bucket add ashforde https://github.com/ashfordeOU/scoop-bucket && scoop install kshana-mcpEvery MCP install snippet
wingetwinget install AshfordeOU.KshanaMcpEvery MCP install snippet
Prebuilt binarydownload kshana-mcp-<target> from the release and check it against SHA256SUMSEvery MCP install snippet
Official MCP registrysearch io.github.ashfordeOU/kshana-mcpEvery MCP install snippet
Remote (streamable HTTP), self-hostedkshana-mcp --http 127.0.0.1:8080Self-hosting guide
Claude Code plugin marketplace/plugin marketplace add ashfordeOU/kshanaUsing Kshana from an agent
JetBrains IDE pluginSettings → Plugins → Marketplace → search "Kshana" (plugin ID dev.kshana.ide)Plugin guide
Signal K pluginnpm install signalk-kshana-trustSignal K plugin guide
OpenCPN plugindownload the plugin tarball from the releaseOpenCPN catalogue submission
Grafana dashboardimport kshana-grafana-*.json from the releaseDashboard source
Reference-build imagedocker pull ghcr.io/ashfordeou/kshana-reference-buildMarine integrations

MCP is the Model Context Protocol. Pin a release with cargo install kshana --version 0.39.0, pip install kshana==0.39.0 or npm install kshana@0.39.0. To build from source, see Install and build under Reference.

Run a scenario from Python and from WebAssembly

import json, kshana

toml = open("clock-holdover.toml").read()
result = json.loads(kshana.run(toml))
print(kshana.version(), result["quantum"]["fom"]["holdover_s"], result["classical"]["fom"]["holdover_s"])
# 0.39.0 6600.0 2610.0

Beyond run, the module exposes run_full (JSON, SVG and the one-line summary at once), run_typed, validate_toml, list_kinds / scenario_kinds and error_kind; see docs/PYTHON_API.md.

The npm package is the whole engine compiled to WebAssembly. In Node.js, hand the binary to initSync; in a browser, await init() fetches it (see README.npm.md).

import { readFileSync } from "node:fs";
import { createRequire } from "node:module";
import { initSync, run, summary, version } from "kshana";

const wasm = createRequire(import.meta.url).resolve("kshana/kshana_bg.wasm");
initSync({ module: readFileSync(wasm) });

const toml = readFileSync("clock-holdover.toml", "utf8");
const result = JSON.parse(run(toml));
console.log(version(), result.quantum.fom.holdover_s, result.classical.fom.holdover_s);
// 0.39.0 6600 2610
console.log(summary(toml));

Architecture

One open engine sits at the centre, and every surface runs it: the command line, the Rust library, Python, WebAssembly and Kshana Studio, the MCP server, the Docker image and the JetBrains plugin. The same scenario file gives the same bytes on each. Kshana Pro sits on top as a separate overlay that depends on the engine and never forks it.

Inside the engine: the domain layers and the verification ledger

One engine, many front doors. A single Rust core (kshana) runs every scenario, reached through a CLI, a Python extension, an in-browser WebAssembly module, an MCP server for AI agents, and a JetBrains IDE plugin — all converging on one api::run_toml dispatch. Inside, the sensor packs plug into a common error-model interface; alongside them sit a reference-frame layer (IAU 2006/2000A precession–nutation and the CIO-based GCRS↔ITRS reduction), an astrodynamics/numerical layer (analytic SGP4/SDP4 and a numerical Cowell propagator with its EGM2008/perturbation force model, maneuver design, and orbit determination), an integrity/GNSS layer (RAIM/ARAIM, SBAS, the measurement domain, jamming, cislunar), a fusion / alt-PNT layer (the GNSS/INS estimators and the gravity/terrain/magnetic map-matchers), a deep-space & lunar layer (radiometric Mars-PNT and the lunar PNT suite, its evidence tier per piece in the matrix — LTC time, VLBI, joint OD+clock, frame realisation, service-volume, differential PNT, interop), a mission-analysis layer (launch / re-entry / coverage / pointing / pass / link budgets and the space-weather environment), and the open resilience & AI/ML study layer (RPCF resilience scoring, the RF-impairment optimism gap, and the quantum-enabled PNT demonstrator) whose reproducible artifacts ride the validated kernels.

Two standalone, workspace-excluded crates sit beside the core — mcp/kshana-mcp (the MCP server, built on the edition-2024 rmcp SDK) and xval/anise-frames (the ANISE/SPICE frame cross-check, which pulls MPL-2.0 (Mozilla Public License 2.0) deps) — kept out of the published crate's dependency graph, Cargo.lock, license gate, and MSRV (minimum supported Rust version) build by the root Cargo.toml exclude list. The JetBrains plugin (ide/jetbrains) is a separate Kotlin project. See docs/ARCHITECTURE.md for the full set of diagrams.

The rendered diagrams (engine flow, module map, distribution) are in docs/ARCHITECTURE.md.

Diagrams

The diagrams are Mermaid sources in docs/diagrams/, rendered to SVG and PNG into docs/assets/diagrams/ (tools/render-diagram-chromium.sh <name> on Linux, the other two render-diagram scripts elsewhere), and a record binds each PNG to the exact SVG it came from. Tests pin the counts they state. The charts in the sections above are drawn by tools from engine runs; these show how the parts fit.

One dispatch, one engine, reproducible output · SVG · source system-overview.mmd

Every surface, from the same engine · SVG · source surfaces.mmd

The inner loop of a run · SVG · source engine-flow.mmd

From a receiver log to a trust score and what uses it · SVG · source trust-flow.mmd

Scenario to signed pack; Kshana never produces or replays a signal · SVG · source lab-round-trip.mmd

How Studio runs, locally · SVG · source studio-flow.mmd

Test and release flow, from local gates to a verified release and the site-only path · SVG · source release-flow.mmd · docs/RELEASING.md

Where the code lives · SVG · source module-map.mmd

What ships where, and what checks it · SVG · source distribution.mmd

AI assistant

kshana-mcp is an MCP server: your assistant runs the actual engine and reads back its JSON, instead of guessing the maths. Each of its 49 tools is a thin wrapper over a public function of the kshana library, so no simulation logic lives in the server.

Install the MCP server

Advisory, not type-approved navigation equipment: the operator remains responsible for navigation. The server runs on your computer; nothing is sent to Ashforde OÜ.

Pick any channel. Every link and snippet is generated from one script (scripts/gen_mcp_install.py) and checked in continuous integration; snippets for Claude Desktop, Claude Code, Cursor, VS Code, Windsurf, Zed, Goose, Codex CLI, Gemini CLI and Continue are in docs/MCP-INSTALL.md.

ChannelCommand or buttonRequiresPinned form
Claude Desktop extensiondouble-click the .mcpb for your system: macOS (Apple silicon) · macOS (Intel) · Windowsnonekshana-mcp-<target>.mcpb of v0.39.0
Cursor (one click)npx (Node) · DockerNode, or Dockerkshana-mcp@0.39.0 / ghcr.io/ashfordeou/kshana-mcp:0.39.0
VS Code (one click)npx (Node) · Docker · Insiders (npx)Node, or Dockerkshana-mcp@0.39.0 / ghcr.io/ashfordeou/kshana-mcp:0.39.0
Claude Codeclaude mcp add kshana -- npx -y kshana-mcp@0.39.0 · plugin: /plugin marketplace add ashfordeOU/kshana then /plugin install kshana@ashfordeNode (or Docker)kshana-mcp@0.39.0
npxnpx -y kshana-mcp@0.39.0Node 18+kshana-mcp@0.39.0
uvx / pipxuvx kshana-mcp==0.39.0 · pipx run kshana-mcp==0.39.0Python 3.9+ with uv or pipxkshana-mcp==0.39.0
Dockerdocker run -i --rm ghcr.io/ashfordeou/kshana-mcp:0.39.0Dockerghcr.io/ashfordeou/kshana-mcp:0.39.0
Homebrewbrew install ashfordeOU/tap/kshana-mcpbrewformula for v0.39.0
Scoopscoop bucket add ashforde https://github.com/ashfordeOU/scoop-bucket then scoop install kshana-mcpScoop (Windows)manifest for v0.39.0
wingetwinget install AshfordeOU.KshanaMcpwinget (Windows)--version 0.39.0
cargocargo install kshana-mcp --version 0.39.0Rust 1.88+kshana-mcp 0.39.0
Prebuilt binarythe release page: kshana-mcp (Linux x86-64), kshana-mcp-<target>[.exe], checked by SHA256SUMS and gh attestation verifynonev0.39.0
MCP registryio.github.ashfordeOU/kshana-mcp (found by registry-aware clients)a registry-aware client0.39.0
Remote (streamable HTTP)kshana-mcp --http 127.0.0.1:8080, self-hosted: see docs/deploy/mcp-http.mdyour own hostv0.39.0

In Claude Code the same server arrives as a plugin: /plugin marketplace add ashfordeOU/kshana, then /plugin install kshana@ashforde. The plugin adds slash commands over the tools: /kshana-run, /kshana-assess-receiver, /kshana-evidence-pack, /kshana-interference-map, /kshana-training-scenario, /kshana-bench-export, /kshana-compliance-report, /kshana-iq, /kshana-import-route, /kshana-marine-integrations and /kshana-jammertest. The vessel-trust tools feed the Signal K and OpenCPN integrations: docs/MARINE-INTEGRATIONS.md.

Per-client set-up is in docs/integrations.md. The server is listed in the official MCP registry as io.github.ashfordeOU/kshana-mcp.

The 49 tools

Scenarios and reports

ToolWhat it does
run_scenarioRun a scenario from a TOML (Tom's Obvious, Minimal Language) definition
list_scenario_kindsThe 87 built-in scenario kinds with descriptions + required/optional fields — so the agent can construct a valid scenario
validate_scenarioPre-flight check: parse the TOML and detect its kind, without running
list_example_scenariosThe bundled reference scenarios as JSON
get_example_scenarioThe TOML text of one bundled reference scenario, byte for byte the file under scenarios/
report_scenarioRun a scenario and return its report
animate_scenarioRun a scenario and return its time series as an animation
sky_geometrySky geometry under an azimuth-dependent skyline: the visible and hidden satellites, DOP, the east-north-up covariance and the horizontal error ellipse; or a skyline preset with its provenance

Export and interoperability

ToolWhat it does
list_export_formatsWhich interoperability formats apply to a scenario (czml, kml, geojson, stk, sigmf), the reason when one does not, and the specification each writer follows
export_interopExport a scenario as CZML (Cesium Language), KML (Keyhole Markup Language), GeoJSON, STK (Systems Tool Kit) ephemeris .e, or SigMF (Signal Metadata
import_routeWrite a GeoJSON LineString route into a scenario that flies a waypoint track (terrain-nav, terrain-slam, gravity-map, combined-altpnt) and return the new TOML
export_sp3Export an orbit scenario's constellation as SP3-c (Standard Product 3, revision c) precise ephemeris
export_ommExport an orbit scenario's elements as a CCSDS (Consultative Committee for Space Data Systems) 502.0-B-2 OMM (Orbit Mean-elements Message) catalogue
export_oemExport an orbit scenario's state series as CCSDS OEM (Orbit Ephemeris Message) 2.0 ephemeris — the TEME (true equator, mean equinox) position and
export_table_csvRun a scenario and return its reproducibility table as CSV (comma-separated values) — the byte-stable table the CLI (command-line interface) writes as <scenario>.table.csv
export_test_benchA scenario's vehicle motion and events for a laboratory GNSS simulator (kshana bench-export)

Receiver and vessel trust

ToolWhat it does
assess_receiver_logAssess a real GNSS (global navigation satellite system) receiver log for trust
assess_vessel_streamScore a bounded NMEA 0183 excerpt (at most 2 MiB and 20,000 epochs
assess_vessel_logA vessel's NMEA 0183 log (at most 4 MiB) as a batch run, with the session TOML stating the vessel's limits
create_evidence_packA signed evidence pack for a window of a vessel's log (kshana receiver-trust evidence)
attach_evidence_timestampBind an RFC 3161 timestamp token (base64 of the .tsr bytes) to a pack, in memory (kshana evidence attach-timestamp)
verify_evidence_packVerify a pack (kshana evidence verify)
generate_training_nmeaSynthetic bridge NMEA 0183 for crew training from a nmea-scenario TOML (jamming, position drag-off, time spoof, replay delay) with the instructor log (kshana-nmea-training/1)
build_interference_mapA GNSS interference map from ADS-B or AIS position reports as CSV text (at most 4 MiB)
route_exposureThe share of a route's length in degraded, not-degraded, unassessed and not-observed cells of one or more interference maps, optionally within a date range
trust_telemetryA trust stream (JSON lines) or receiver-trust result rendered as Prometheus text, CEF or LEEF syslog lines or an OTLP JSON payload, with the kshana trust-telemetry encoders
jammertest_importRead the published Jammertest test catalogue and transmission plan (NPRA/jammertest-plan, MIT) as scheduled truth (kshana jammertest import): one test area's slots become receiver-trust events with the catalogue id and year in each label. Planned slots, not recorded on-air times; no contact field of the plan is read. MODELLED. See docs/JAMMERTEST.md.
jammertest_scoreScore a receiver log against that schedule (kshana jammertest score): per test the detection latency, missed alarms and time to recover, and the false alarms outside every slot. Text logs as log, binary (ubx, sbf) as log_base64. A signed pack needs a key: command line. Advisory only; MODELLED.
fit_imu_logAccelerometer and gyro parameters of the hybrid and fusion scenarios fitted from a stationary IMU log (CSV or EuRoC) by Allan deviation, with a ready-to-paste [accel_classical] table and the log's SHA-256 (kshana imu-fit). Text in, JSON out; MODELLED.

GNSS IQ (work-directory files; off in HTTP mode)

ToolWhat it does
iq_signalsThe GNSS IQ layer's set-up
iq_infoDescribe one IQ (in-phase and quadrature) recording in the work directory without processing it
iq_sceneGenerate a multi-satellite GNSS IQ scene into the work directory (kshana iq scene)
iq_acquireFFT (fast Fourier transform) acquisition of one or more PRNs (pseudo-random noise codes) over a recording (kshana iq acquire), optionally behind front-end stages
iq_trackAcquire, then track with the DLL/PLL/FLL (delay-, phase- and frequency-locked loop) bank (kshana iq track), with the loops from a `kshana.loop-desig
iq_frontendApply receiver front-end and interference-mitigation DSP (digital signal processing
iq_sweepReplay one IQ recording in the work directory across several tracking-loop designs (kshana iq sweep)
iq_monitorRun the interference and spoofing detection monitors over an IQ recording in the work directory (kshana iq monitor)
iq_labfitFit the tracking-loop loss-of-lock model to lab runs (kshana iq labfit) from an iq-labfit scenario whose logs are inline (text or base64
iq_test_conditionsValidate a kshana.test-conditions/1 file given as text and return the resolved conditions with their hash
iq_campaignRun a lab-replay campaign (kshana iq campaign)
iq_campaign_statusA campaign output folder's progress

Compliance mapping

ToolWhat it does
compliance_reportThe public-framework mapping filled from result documents given as text (kshana compliance-report)
compliance_mappingThe static mapping tables (or, with sources, the source documents they cite with versions and URLs) as Markdown, led by the same statement
list_standards_packsThe standards packs (kshana standards-pack list): scored scenario sets for the DHS Resilient PNT framework test profiles, IMO MSC.1/Circ.1575 and ICAO Doc 9849 Appendix F
run_standards_packOne pack run against bars stated before the run: each test MET, NOT MET or NEEDS INPUT; MODELLED, rates no product
lunanet_afs_checkThe LunaNet Augmented Forward Signal checked against LNIS V5 AD1 Volume A (LSIS-AFS V1.0): the codes against the printed tables, or a symbol stream against the frame format; LDPC and CRC-24Q of subframes 2 to 4 are not verified
create_round_trip_packThe signed laboratory round-trip pack: scenario, kshana.test-conditions/1 document, receiver log and score linked by hash

Benchmark

ToolWhat it does
score_benchmarkA kshana-bench submission scored against a truth file, both JSON text (kshana bench score, bench/SPEC.md): the result file with the spec version, split, input hashes and the task's metrics. MODELLED; describes a log or corpus, never a product.
render_leaderboardkshana-bench result files rendered as the static leaderboard page (HTML text), each validated first.

Editions

The whole engine is free. Kshana Pro and custom studies are for programmes that need more, and every paid route starts with a message: there are no prices here.

FreeKshana ProCustom study
What it isthe whole open engine, all 87 scenario kinds, no feature gatea proprietary overlay on the same engine, under contracta MODELLED PNT-resilience study of your system, done for you
LicenceAGPL-3.0 (GNU Affero General Public License, version 3), or a commercial licenceproprietarycontract
How to startinstall or open kshana.devrequest a Pro evaluationrequest a study

What Pro is, in the words of docs/PRO.md:

A strict superset of open Kshana. Pro depends on the open engine as a library and never forks it. Every open scenario kind runs in Pro unchanged, and an open scenario runs in Pro with no licence at all.

No new physics. Pro adds no physical model and changes none. Every Pro number comes from runs of the open engine, so a Pro figure is as trustworthy as the open scenario kind it came from, and never more.

Pro answers a programme's next questions: which design to fly (a design optimiser and its Pareto front), how sure the answer is (uncertainty and sensitivity), and whether the mission meets its requirements (a mission dossier, requirements traceability, trade studies, a scenario regression check, clock digital twins, a study dossier and an on-premises service). It also watches a campaign of figures and fails a pipeline when one gets worse, tests candidate signal plans against the open satellite-navigation signals in both directions (spectrum coexistence), and queues studies in an on-premises job service with a hash-chained delivery ledger. Each is described, with what it produces and what it does not do, in docs/PRO.md. Nothing Pro produces is a certification, and a custom study is not a certification either.

What Kshana Pro reads from the open engine, and support from Ashforde® OÜ

What Kshana Pro builds on. Every part of Pro works from the open engine and leaves it unchanged:

  • The design optimiser, the uncertainty study and the mission dossier run open-engine scenarios through the engine's public interface and compute every number from the runs' results. Each output keeps the VALIDATED, MODELLED or PARTNER tier the open engine gave each figure, never a higher one.
  • Clock digital twins use the open engine's clock model and its Allan-deviation estimator: a twin is calibrated to the device's published Allan budget, then checked by estimating the twin's Allan deviation with the open estimator.
  • Trade studies run every architecture option as an open-engine scenario, unchanged, and rank the options on a figure of merit read from each run's result.
  • Campaign watch reads its figures from the results of open-engine runs of the scenarios in a pack, and compares them with the previous passing run.
  • Spectrum coexistence reads every physical number from open-engine runs of the leo-signal and constellation-design kinds, and adds only the sum over the satellites in view and the ranking of the plans.
  • The on-premises job service runs open and Pro scenarios through the same engine and stores each result as the run returned it.
  • Evidence packs record, for each run, the scenario hash the open engine stamps on its result, so a figure in a pack can be reproduced by re-running its scenario.
  • Systems-engineering and programme tooling. Kshana Pro's model-based systems-engineering (MBSE) and programme tooling checks a programme's requirements against runs of the open engine: it imports requirements as comma-separated values (CSV), or as a documented subset of the Requirements Interchange Format (ReqIF) or of Systems Modeling Language version 2 (SysML v2) text, evaluates each acceptance criterion, with its unit, against the values a run wrote, and produces a verification cross-reference matrix (VCRM), a SysML v2 model, a change-impact report and an offline evidence pack. It re-runs and recomputes nothing, and reads only what the open engine publishes: each run's result.json (the fields a criterion names, their units, the reproducibility stamp of scenario hash, seed, engine version and schema version, and the run's label and figure tiers), its report.json (kind, reproducibility record and capability labels), the scenario file (its hash, kind, seed and parameters), the field-units schema (each field's unit, provenance and evidence tier) and the verification matrix (each capability's VALIDATED, MODELLED or PARTNER label).
Support & professional services

Kshana is free and open source under the AGPL-3.0 and professionally developed and maintained by Ashforde® OÜ (Estonia). The open engine is complete and usable on its own. For organisations that need more, Ashforde® OÜ offers:

  • Commercial support & integration — embedding Kshana in your toolchain, custom scenarios, and priority fixes.
  • Custom sensor models — calibrated to your hardware, including export-sensitive resilience models maintained in a private overlay.
  • Kshana Pro — proprietary model-based systems-engineering (MBSE) and programme tooling that checks a programme's requirements against runs of the open engine and produces a verification cross-reference matrix (VCRM), a Systems Modeling Language version 2 (SysML v2) model, a change-impact report and an offline evidence pack. It re-runs nothing and reads only the engine's published outputs: each run's result.json and report.json, the scenario file, the field-units schema and the verification matrix's labels (the full list is under Editions).
  • Kshana Pro design, uncertainty and mission tooling — the Pareto front of a design space, uncertainty and sensitivity over thousands of runs, and a one-command mission dossier with a verification matrix and a PDF; see docs/PRO.md.
  • Kshana Pro campaign watch, spectrum coexistence and job service — a pipeline that fails when a watched figure gets worse, signal plans tested against the open satellite-navigation signals in both directions, and an on-premises job queue with a hash-chained delivery ledger; see docs/PRO.md.
  • Training & consulting on quantum/classical PNT performance analysis.

This is the open-core model: the engine is, and stays, openly licensed; the sustaining business is expertise, support, and the proprietary extensions — not license fees. Contact contact@ashforde.org · ashforde.org.

Research

Studies built on the open engine are published on arXiv. Each names the engine command behind it, so its numbers can be regenerated from a committed scenario or study example.

PaperWhat it showsEngine command
*Anticipating the Optimism Gap: Predicting Distribution-Shift Degradation of RF-Impairment Detectors from In-Distribution Statistics*
arXiv:2606.22054 · doi:10.48550/arXiv.2606.22054The drop in a GNSS interference detector's score once conditions shift can be predicted from in-distribution statistics alone, on an open synthetic testbed and then on open field recordings.cargo run --release --example optimism_study -- paper-artifacts/optimism-study.json
*A Conditional Timing Protection Level: Holdover-Limited Undetected Time Error Under GNSS Spoofing*
arXiv:2606.24210 · doi:10.48550/arXiv.2606.24210A GNSS timing receiver under spoofing has no finite unconditional bound on undetected time error, so the paper gives a conditional one, calibrated on a recorded over-the-air spoof from the public JammerTest 2024 campaign.cargo run --release --example tpl_jammertest
*How Stable Is a PNT Resilience Score? Decision-Instability of Single-Number Resilience Ratings under Framework-Aligned Weighting*
arXiv:2607.05415 · doi:10.48550/arXiv.2607.05415A single composite resilience score is a stable basis for a decision only where one design dominates; where designs contend, re-weighting alone can change the winner.cargo run --release --example resilience_report -- paper-artifacts/resilience-study.json
*Earth-baseline VLBI restores the observability of a lunar surface station in joint orbit-and-clock determination*
arXiv:2607.02566 · doi:10.48550/arXiv.2607.02566Ranging inside a lunar constellation leaves a surface station's absolute position unobservable; a very-long-baseline interferometry (VLBI) delay from Earth restores it when the constellation is sparse, and sharpens it when it is rich.the lunar-joint-od-clock kind: kshana example lunar-joint-od-clock > s.toml && kshana s.toml
*The Cost of Lunar South-Polar Geometry, and Surface Beacons as the Efficient Fix: A Dilution-of-Precision Analysis*
arXiv:2607.06212 · doi:10.48550/arXiv.2607.06212Planned constellations of four to six satellites give poor geometry at the lunar south pole, and a few surface ranging beacons fix it far more cheaply than more satellites.the lunar-beacon kind: kshana example lunar-beacon > s.toml && kshana s.toml
*Cislunar navigation is an observability problem: arc-length thresholds, Gramian conditioning, and the Doppler lever*
arXiv:2610.23871 · doi:10.48550/arXiv.2610.23871Dilution of precision is undefined for range-only cislunar tracking, because velocity is unobservable at a snapshot, so the paper uses the observability Gramian on four planar distant retrograde orbits: range-only is rank 2 of 4 at a snapshot and needs an arc of about 2.09 h to become fully observable, with conditioning improving as the arc lengthens; range-rate (Doppler) gives rank 4 instantly; and co-estimating a station with satellite states and clocks stays rank-deficient by one unless an external interferometric observable is added. Requirements belong in arc-length, conditioning and measurement-type budgets, not DOP.the cislunar-observability kind: kshana scenarios/cislunar-observability.toml (its sibling cislunar-arc-recovery tests the threshold with an independent finite-difference estimator)

The three study examples write byte-deterministic artifacts (fixed seeds) that record their engine version, seeds and a configuration hash. The three lunar and cislunar papers are built on the lunar suite (each piece's evidence tier is in the verification matrix); their geometry and dilution-of-precision claims are also cross-checked against separate oracles in tests/validate_p*.rs. More in Reproducible study artifacts under Reference.

Cite

If you use Kshana in academic or technical work, please cite the version you used, with the scenario and seed. CITATION.cff holds the machine-readable metadata, and GitHub shows a "Cite this repository" button from it. Every release is archived on Zenodo; the concept DOI (Digital Object Identifier) 10.5281/zenodo.20528627 always resolves to the latest version.

Baweja, C. (2026). Kshana — a PNT-resilience simulator with quantum-sensor performance models. Ashforde OÜ. https://doi.org/10.5281/zenodo.20528627

The papers above:

Baweja, C. (2026). Anticipating the Optimism Gap: Predicting Distribution-Shift Degradation of RF-Impairment Detectors from In-Distribution Statistics. arXiv:2606.22054. https://doi.org/10.48550/arXiv.2606.22054

Baweja, C. (2026). A Conditional Timing Protection Level: Holdover-Limited Undetected Time Error Under GNSS Spoofing. arXiv:2606.24210. https://doi.org/10.48550/arXiv.2606.24210

Baweja, C. (2026). How Stable Is a PNT Resilience Score? Decision-Instability of Single-Number Resilience Ratings under Framework-Aligned Weighting. arXiv:2607.05415. https://doi.org/10.48550/arXiv.2607.05415

Baweja, C. (2026). Earth-baseline VLBI restores the observability of a lunar surface station in joint orbit-and-clock determination. arXiv:2607.02566. https://doi.org/10.48550/arXiv.2607.02566

Baweja, C. (2026). The Cost of Lunar South-Polar Geometry, and Surface Beacons as the Efficient Fix: A Dilution-of-Precision Analysis. arXiv:2607.06212. https://doi.org/10.48550/arXiv.2607.06212

Baweja, C. (2026). Cislunar navigation is an observability problem: arc-length thresholds, Gramian conditioning, and the Doppler lever. arXiv:2610.23871. https://doi.org/10.48550/arXiv.2610.23871

Licence

Kshana is dual-licensed: the GNU AGPL-3.0-only (LICENSE), or a commercial licence from Ashforde® OÜ for closed integration that the AGPL does not suit. LICENSING.md explains which applies. Contributions are licensed inbound under the AGPL and also grant Ashforde® OÜ the right to include them in the commercial edition; sign off each commit with git commit -s (see CONTRIBUTING.md). "Kshana" and its marks are trademarks of Ashforde® OÜ: the licence covers the code, not the name, so please rename forks.

Reference

The long material, collapsed. Every document is listed in Documentation.

Install & build from source

Install & build

Requires a Rust toolchain (≥ 1.85, the rust-version in Cargo.toml; developed on 1.93).

git clone https://github.com/ashfordeOU/kshana
cd kshana
cargo build --release
cargo test          # all tests pass

Usage: the command line in full

Usage

Run any scenario; the CLI dispatches on the scenario's kind field and writes <scenario>.result.json, <scenario>.chart.svg, <scenario>.report.html and <scenario>.report.json next to it — plus <scenario>.table.csv for the kinds that publish a table. The report (a HyperText Markup Language (HTML) page and a JSON document with the same content) carries an executive summary, every input with its unit, the results and charts, a campaign's sweep, Monte Carlo or chain tables, an events timeline, the VALIDATED / MODELLED / PARTNER label and source of every capability the run used, what is not modelled, and a reproducibility record (engine version, Secure Hash Algorithm 256-bit (SHA-256) digests, seed, platform and the exact command). It prints to a clean PDF (Portable Document Format) file from the browser on A4 or Letter paper; the engine writes no PDF itself. See docs/REPORTS.md.

cargo run -- scenarios/clock-holdover.toml
cargo run -- scenarios/imu-deadreckoning.toml
cargo run -- scenarios/timetransfer.toml
cargo run -- scenarios/hybrid-pnt.toml
cargo run -- scenarios/orbit-gnss-challenged.toml
cargo run -- scenarios/orbit-sgp4-gps.toml
cargo run -- scenarios/orbit-rinex.toml
cargo run -- scenarios/integrity-raim.toml

# Export a propagated constellation to an SP3-c precise-ephemeris file:
cargo run -- scenarios/orbit-sgp4-gps.toml --export-sp3 gps.sp3

# Export the constellation's mean elements to a CCSDS OMM catalogue (one OMM
# message per TLE-defined satellite, with its real NORAD id / COSPAR designator):
cargo run -- scenarios/orbit-sgp4-gps.toml --export-omm gps.omm

# Export the velocity-carrying state to a CCSDS OEM 2.0 ephemeris (GMAT/Orekit/STK):
cargo run -- scenarios/orbit-sgp4-gps.toml --export-oem gps.oem

# Export the geometry for a globe, a map or a mission-analysis tool: CZML, KML,
# GeoJSON, STK .e, or SigMF for the spectrum kind (every format that applies):
cargo run -- scenarios/jamming-demo.toml --export all

--export <czml|kml|geojson|stk|sigmf|all|list> writes CZML (the Cesium Language),

Questions fréquentes

Qu'est-ce que Kshana PNT-resilience simulator ?

Validated Kshana PNT simulator: orbits, GNSS, fusion, receiver trust, interference maps.

Comment installer Kshana PNT-resilience simulator ?

Il s'exécute sur votre machine. Dans Claude Code : claude mcp add kshana-pnt-resilience-simulator -e 'KSHANA_MCP_IQ_DIR=<KSHANA_MCP_IQ_DIR>' -e 'KSHANA_MCP_IQ_MAX_SAMPLES=50000000' -- docker run -i --rm ghcr.io/ashfordeou/kshana-mcp:0.39.0. Pour les autres clients, collez la configuration JSON de cette page dans leurs réglages MCP.

Faut-il une clé API pour Kshana PNT-resilience simulator ?

Son entrée au registre n'indique aucune clé ni secret obligatoire. Certaines fonctions peuvent tout de même demander un compte auprès du service auquel il se connecte.

Kshana PNT-resilience simulator est-il open source ?

Oui. Son code est sur GitHub sous licence AGPL-3.0.

Qui maintient Kshana PNT-resilience simulator ?

Il est publié par ashfordeOU. AI.tn le référence sans le maintenir ni le recommander.

Issu du registre MCP officiel. Être listé n'est pas une recommandation : vérifiez le code et les permissions d'un serveur avant de lui donner accès à vos données.