Использование Kshana из ИИ-агента
Для агента (или человека, который им управляет): какой инструмент вызывать для какого вопроса, что инструменты сделают и чего не сделают и что сохранять с каждым ответом. Поверхности и ячейки, недоступные на данной поверхности: SURFACES.md.
Подключение#
npx -y kshana-mcp@0.37.0 # or: uvx kshana-mcp==0.37.0, brew, scoop, winget, cargo, docker
Фрагмент с названиями сторонних ИИ-клиентов здесь опущен; он есть в docs/AGENTS.md на GitHub.
Правило для каждого ответа#
Запускайте движок; не угадывайте числа. Сообщайте то, что вернул инструмент, с единицей и уровнем доказательств (VALIDATED по внешнему оракулу или MODELLED), сценарием, начальным значением (seed) и версией движка, чтобы прогон можно было повторить. Сохраняйте с каждым результатом его собственные оговорки.
Какой инструмент для какого вопроса#
| Вопрос | Инструмент (MCP) | Слэш-команда |
|---|---|---|
| Запустить или объяснить сценарий PNT (орбиты, GNSS, синхронизация времени, комплексирование, Луна, оптические линии связи, ...) | list_scenario_kinds, list_example_scenarios, get_example_scenario, validate_scenario, run_scenario, report_scenario, animate_scenario, export_sp3, export_omm, export_oem, export_interop, list_export_formats, export_table_csv |
/kshana-run |
| Заслуживал ли доверия этот журнал приёмника или NMEA судна и когда это прекратилось? | assess_receiver_log (любой формат журнала), assess_vessel_log (NMEA судна, пакетно), assess_vessel_stream (ограниченный фрагмент) |
/kshana-assess-receiver |
| Мне нужен синтетический NMEA с событием подавления, увода, подмены времени или повтора для обучения | generate_training_nmea |
/kshana-training-scenario |
| Показать оценку доверия судна в форматах мониторинга или SIEM (Prometheus, CEF, LEEF, OTLP) | trust_telemetry |
/kshana-trust-telemetry |
| Оценить журнал приёмника по опубликованному расписанию Jammertest (задержка обнаружения, пропуски обнаружения, ложные тревоги, время восстановления) или превратить этот план в события | jammertest_score, jammertest_import |
/kshana-jammertest |
| Составить защищённую от подделки запись того, что движок сообщил об окне журнала судна, или проверить такую запись | create_evidence_pack, verify_evidence_pack, attach_evidence_timestamp |
/kshana-evidence-pack |
| Навигационные данные каких спутников Galileo этот приёмник передаёт с аутентификацией (OSNMA)? | нет: в MCP отсутствует. Используйте kshana osnma verify (CLI), kshana.osnma_verify (Python) или osnma_verify (WASM, карточка OSNMA в Studio) |
не является слэш-командой |
| Мне нужны движение транспортного средства и моменты событий сценария, чтобы воспроизвести их на лабораторном имитаторе GNSS | export_test_bench |
/kshana-bench-export |
| Какие строки требований публичной рамочной программы эти прогоны подкрепляют доказательствами и в чём разрыв? | compliance_report (по тексту результата), compliance_mapping (таблицы, без прогонов) |
/kshana-compliance-report |
| Выполнить оцениваемый пакет стандартов (тестовые профили DHS RPCF, IMO MSC.1/Circ.1575, ICAO Doc 9849, приложение F) по порогам, заданным до прогона? | list_standards_packs, run_standards_pack (передайте отчёт в compliance_report, чтобы получить строки) |
|
| Проверить расширенный прямой сигнал LunaNet (коды, SB1, формат кадра) по LNIS V5 / LSIS-AFS V1.0 или проверить поток символов? | lunanet_afs_check (спецификация mode, символы или генерация); LDPC и CRC-24Q подкадров с 2 по 4 не проверяются |
|
| Связать лабораторный прогон (сценарий, заявленные условия испытаний, журнал приёмника, оценка) в одном подписанном пакете? | create_round_trip_pack после export_test_bench (docs/spec/TEST-CONDITIONS.md) |
|
| Оценить заявку по обнаружению или по holdover относительно файла истины kshana-bench либо отобразить файлы результатов как страницу таблицы лидеров? | score_benchmark, render_leaderboard |
— |
| Мне нужен сценарий, в котором выполняется полёт по маршруту GeoJSON (terrain-nav, terrain-slam, gravity-map, combined-altpnt) | import_route |
/kshana-import-route |
| Какие спутники видит пользователь на улице, в гавани, в фьорде или на контейнерном терминале, каковы DOP и эллипс ошибок? | sky_geometry (запрос или skyline_preset); раздел [skyline] сценария через run_scenario (для orbit и integrity нужен user_site) |
/kshana-run |
| Где GNSS выглядел ухудшенным и какая часть этого маршрута проходит в такой зоне? | build_interference_map, затем route_exposure |
/kshana-interference-map |
| Записи IQ GNSS (сцена, захват, сопровождение, входной тракт, кампании) | сначала iq_signals, затем инструменты iq_* |
/kshana-iq |
Навыки vessel-receiver-trust, training-nmea-scenario, trust-telemetry, compliance-mapping, test-bench-export, gnss-iq и interference-map-route-exposure содержат приведённые ниже правила для агентов, которые загружают навыки.
Чего каждый инструмент не делает#
- Читать или записывать файлы. Содержимое передаётся в самом запросе: входные данные — это текст в запросе объёмом не более 4 МиБ, а поле сценария, указывающее на файл, отклоняется. Только инструменты
iq_*обращаются к папке, и только к той, что задана вKSHANA_MCP_IQ_DIR, причём каждый путь ограничен ею. - Проверять OSNMA. Инструмента MCP для этого нет: входные данные — длинный необработанный поток приёмника (страницы I/NAV или захват UBX), что подходит для CLI и Python, а инструмент, принимающий такой поток, добавил бы большую поверхность для ввода без пользы. Направьте пользователя к
kshana osnma verify <file> --public-key ... --json(или к Pythonosnma_verify). Что бы ни говорил его вывод, приводите консультативное уведомление дословно: это только статус аутентификации, не служба целостности навигации, не навигационное оборудование с утверждённым типом и не заявление об эффективности защиты от спуфинга; результат имеет смысл только при наличии корня Меркла или открытого ключа, полученного пользователем другим путём. - Запускать процесс.
receiver-trust liveкак работающий поток (с шлюзом и--listen), экспортёры телеметрии (trust-telemetry: Prometheus, syslog, OTLP) и потоковая передача тренировочных NMEA на адрес доступны только из командной строки.assess_vessel_streamоценивает фрагмент тем же движком и ничего не пишет в порт. Инструменты для фрагментов возвращают живой JSON-lines схемы 1,3 (утверждениеadvisoryиgeometryспутников в каждую эпоху,classдля каждого вывода); CSV прогона по судну начинается со строки комментария#с тем же утверждением, поэтому читайте его с параметром комментариев.--udpи--listen tcp:привязываются к адресу loopback, если не указано иное. - Записывать сигнал.
export_test_benchвозвращает движение транспортного средства и размеченные интервалы событий в виде текста; ничто из возвращаемого им не является радиочастотным сигналом или сигналом в основной полосе, не моделирует и не формирует его, а событие не является рецептом создания помех. Передавайте егоnoticeвместе с файлами; имитатор и его оператор отвечают за то, чтобы запускать их только там, где это разрешено. - Утверждать больше, чем говорит сопоставление.
compliance_reportуказывает, какие строки рамочной программы набор прогонов подкрепляет доказательствами, с разрывом по каждой строке. Он никогда не утверждает, что рамочная программа выполнена или что изделие оценено либо одобрено; приводите егоstatementдословно и говорите «подкрепляет доказательствами», ничего более сильного. Он читает текст результатов и сценариев, который вы передаёте, но никогда не путь. - Загружать данные. Загрузка полигонов суши доступна только из командной строки и требует
--allow-network. При необходимости передайте файл суши как текст. Используйте только данные, на использование которых у пользователя есть лицензия. - Передавать что-либо или синтезировать РЧ-сигнал. Генератор тренировочных данных пишет текст NMEA; уровень IQ пишет файлы отсчётов для программных приёмников.
Что сохранить вместе с ответом#
| Вывод | Сохранить |
|---|---|
| Геометрия спутников и классы выводов (0,36) | Приводите геометрию рядом с оценкой и класс каждого вывода в том виде, как он возвращён: geometry означает небо (утверждение о небе, а не вывод, что атаки не было), environment — сигнальную обстановку, inconsistency — свидетельство, похожее на атаку. Говорите «геометрия неизвестна», когда статус равен unknown (в журнале нет GSV или GSA); не выводите её самостоятельно. Пороги имеют уровень MODELLED с указанным происхождением. |
| Оценка доверия к приёмнику | Носит консультативный характер: это не навигационное оборудование с утверждённым типом (IEC 61108, IEC 61162); ответственность остаётся на операторе. MODELLED. Задавайте пределы судна до прогона и не подгоняйте порог под результат. Высокая оценка не доказывает подлинность определения места; проверки не способны обнаружить спуфер, согласованный со всеми остальными датчиками. |
| Пакет доказательств | Техническая запись, а не юридическое заключение, не установление факта и не одобрение. Проверяйте открытым ключом подписанта, полученным другим путём; без него вердикт — intact-signer-not-pinned, который доказывает лишь целостность относительно ключа, названного в самом пакете: говорите «целостность сохранена, подписант не установлен», но никогда «проверено». Никогда не возвращайте, не записывайте в журнал и не запрашивайте начальное значение (seed) подписи в разговоре, если ключ важен: используйте CLI. |
| Тренировочные NMEA | Только текст, для обучения и испытаний, никогда для действующих навигационных систем судна. Возвращайте начальное значение (seed) и журнал инструктора. |
| Карта помех, экспозиция маршрута | То, как читаются коды точности, а также геометрия сетки и маршрута, имеет уровень VALIDATED по независимым библиотекам на синтетических входных данных; пороги метода остаются на уровне MODELLED, а то, что ухудшенная ячейка вызвана помехами, не проверяется: ухудшенная ячейка не указывает на помехи как на причину. Ненаблюдавшаяся ячейка не является свидетельством того, что маршрут свободен. Это прошлые отчёты, не прогноз. Только агрегаты: не пытайтесь восстановить идентификаторы. Карты ADS-B и AIS остаются раздельными. |
Область излучателя (interference-map locate) |
MODELLED: допустимая область при радиопрямой видимости, а не определение места. Приводите область на заявленном уровне доверия вместе с центроидом и его эллипсом, никогда не один центроид; говорите unconstrained, когда данные её не сужают; говорите, что она зависит от модели (проверено только на синтетических данных; заранее зарегистрированное сравнение Jammertest выполнено один раз и дало NOT ASSESSABLE для обоих источников, так что внешней проверки не было). Нейтральная формулировка: «оценка области излучателя»; никогда не называйте и не подразумевайте, кто или что стоит за источником, государство, силу или намерение. Только агрегаты; не пытайтесь восстановить идентификаторы. Публикация областей излучателей в публичной обсерватории отключена. |
| Геометрия неба, линия горизонта | Геометрия MODELLED при заданной модели ошибок, только прямая видимость: без дифракции, многолучевости и приёма без прямой видимости. Пресеты REPRESENTATIVE, это не съёмки; приводите происхождение пресета. Орбитальные группировки пресетов — это репрезентативное небо, а не небо какой-либо даты. Эллипс масштабирует заданную UERE: это не измеренная точность и не граница целостности. Сохраняйте advisory. |
Доступность оптической линии (optical-atmosphere, 0,37) |
MODELLED, консультативный. Климатические условия облачности — заданные входные данные, а не набор данных, и сравнения с измеренной записью доступности не проводилось: говорите «при этих допущениях», но никогда «доступность в этом месте». Приводите потолок места (availability_ceiling_pct: то, что не поднимает никакой запас) рядом с его доступностью и указывайте, какие выигрыши методов являются входными данными (Kshana не моделирует контур адаптивной оптики). Численные результаты сверены с независимой программой, которая проверяет реализацию формул, а не атмосферу. |
Проверка holdover (holdover-test, 0,38) |
MODELLED, консультативный. Говорите «измерено относительно маски», но никогда не говорите, что часы или система удовлетворяют Рекомендации или одобрены по ней. Два момента времени (GNSS отключён, GNSS восстановлен) — это заявление оператора: Kshana ничего не отключал и не восстанавливал и не может их проверить, поэтому приводите их как заявленные. Маска, для которой запись слишком коротка, получает статус INCOMPLETE, но никогда не «пройдено». Журнал сервопривода (linuxptp, chrony) — это ошибка под управлением сервопривода, а не независимое измерение относительно UTC; указывайте, из какой записи взяты значения. См. docs/TIMING-HIL.md. |
| Любой результат сценария | Указанные в нём figure_tiers или label и строка происхождения. |
Границы#
Используйте синтетические данные или собственные данные пользователя. Не называйте в выводе людей, суда или организации, которых не было во входных данных пользователя. Kshana — инструмент анализа и обучения, а не лётное или навигационное изделие.