Token导航 LogoToken导航TokenDH.com
研究检索需要联网github未标认证来源可访问许可证需确认审计异常

rhino-sdkrhino SDK 搜索

Agent Skill

rhino-sdk 用于查找、检索和筛选相关信息,适合在 Codex、Claude、Cursor、Gemini CLI 中需要根据关键词、任务场景或来源线索快速定位候选结果时使用。可结合来源仓库、安装命令和原始 README 继续核验具体用法。安装前建议确认权限范围、维护状态,以及是否会触发联网、命令执行或文件读写。

总安装

306

周安装

13

GitHub Stars

公开资料未说明

下载量

107
CodexClaudeCursorGemini CLI

安装说明

本站只整理中文说明和来源信息,不托管安装包,也不代用户安装。

GitHub

来源数

2

许可证

unknown

最后核验

2026-05-01

来源状态

来源可访问

安装方式

通过对话安装

复制提示词发给支持本地命令或 Skills 的 AI 助手,先确认命令和权限,再让它执行。

请帮我安装这个 Agent Skill:rhino-sdk(rhino SDK 搜索)
来源仓库:https://github.com/naverazy-rhino/rhino-sdk-skills
仓库路径:skills/rhino-sdk
安装命令:
npx skills add https://github.com/naverazy-rhino/rhino-sdk-skills --skill rhino-sdk
安装前请先检查当前环境是否支持对应 CLI,并向我确认将要执行的命令、安装目录、联网范围和文件读写权限;确认后再执行。

命令行安装

复制命令到本机终端执行。该命令会通过 npx skills 从第三方来源获取 Skill;本站只展示命令,不托管安装包,也不自动执行。

skills.shnpx skills
npx skills add https://github.com/naverazy-rhino/rhino-sdk-skills --skill rhino-sdk

简介

rhino-sdk 用于查找、检索和筛选相关信息,适合在 Codex、Claude、Cursor、Gemini CLI 中快速定位候选结果。

  • 适用于基于关键词或任务场景的信息聚合场景。
  • 可通过 npx 命令从 rhino-sdk-skills 仓库安装,建议查看原始 README 了解具体用法。
  • 使用前需确认权限范围和维护状态,警惕可能的联网或文件读写行为。
  • 输出内容应以原始 README 和项目事实为依据,不直接作为最终结论。

SKILL.md

Rhino Health SDK — Workflow Planner & Code Expert

Plan-first skill for the rhino-health Python SDK (v2.1.x). Takes high-level research and analytics goals, decomposes them into phased execution plans, and generates complete runnable Python code.

Context Loading

Before responding, read ALL reference files — planning requires the full SDK picture:

  1. API Referencereferences/sdk_reference.md Endpoint classes, methods, enums, CreateInput summaries, dataclass fields, import paths.
  2. Patterns & Gotchasreferences/patterns_and_gotchas.md Auth patterns, resource lookup, metrics execution, filtering, code objects, async, and pitfalls.
  3. Metrics Referencereferences/metrics_reference.md All 40+ federated metric classes with parameters, import paths, and decision guide.
  4. Example Indexreferences/examples/INDEX.md Mapping of use cases to working example files with key methods and difficulty levels.

For SDK questions that don't require planning, you may selectively load only the relevant files.

Request Routing

Determine what the user needs and follow the appropriate workflow:

User intentAction
High-level goal, multi-step workflow, "plan", "design", "how should I approach"Full planning workflow (Sections 3-6)
"Write code", "generate a script", single-task code generationCode generation with validation (Section 6)
"How do I...", SDK concept questionAnswer from reference files (Section 9)
Error, traceback, "why is this failing"Error diagnosis (Section 8)
"Which metric for...", metric configurationMetric selection (Section 7)
"Show me an example", "sample code"Example matching from references/examples/INDEX.md

Planning Process

Follow these four steps for any multi-step goal:

Step 1: Analyze the Goal

Extract from the user's request:

  • Data: What data sources? Do datasets already exist, or need ingestion/creation?
  • Analysis: What computation? Metrics, custom code, harmonization, or a combination?
  • Output: What does the user want? Numbers, transformed datasets, trained models, exported files?
  • Constraints: Filters (age > 50, gender = F), specific sites, time ranges, target data models (OMOP/FHIR)?

If any of these are unclear, ask the user before producing the plan.

Step 2: Select Workflow Templates

Match the goal to one or more composable SDK pipeline templates:

Template A: Federated Analytics

Run statistical metrics across one or more sites without moving data.

Auth → Project → Datasets → Metric Config → Execute → Results
StepSDK MethodNotes
Authenticaterh.login()Always first
Get projectsession.project.get_project_by_name()Check for None
Get datasetsproject.get_dataset_by_name() or list allOne per site
Configure metricMean(variable=...), Cox(...), etc.Add filters/group_by as needed
Execute per-sitesession.dataset.get_dataset_metric(uid, config)Single site
Execute aggregatedsession.project.aggregate_dataset_metric(uids, config)Cross-site, List[str] of UIDs
Execute joinedsession.project.joined_dataset_metric(config, query, filter)Federated join with shared identifiers

Use when: descriptive stats, survival analysis, hypothesis tests, or any metric-based analysis.

Template B: Code Object Execution

Run custom containerized or Python code across federated sites.

Auth → Project → Data Schema → Code Object Create → Build → Run → Wait → Output Datasets
StepSDK MethodNotes
Authenticaterh.login()
Get/create projectsession.project.get_project_by_name()
Get/create schemasession.data_schema.create_data_schema()Only if new data format
Create code objectsession.code_object.create_code_object()GENERALIZED_COMPUTE or PYTHON_CODE
Wait for buildcode_object.wait_for_build()Only for GENERALIZED_COMPUTE
Runsession.code_object.run_code_object()input_dataset_uids=[[uid]] double-nested
Wait for completioncode_run.wait_for_completion()
Access outputsresult.output_dataset_uids.root[0].root[0].root[0]Triply nested

Use when: custom computation — train/test splits, feature engineering, model training, any logic that metrics alone cannot express.

Template C: Data Harmonization

Transform source data into a target data model (OMOP, FHIR, custom).

Auth → Project → Vocabulary → Semantic Mapping → Syntactic Mapping → Config → Run → Output
StepSDK MethodNotes
Authenticaterh.login()
Get projectsession.project.get_project_by_name()
Create semantic mappingsession.semantic_mapping.create_semantic_mapping()Optional; for vocabulary lookups
Wait for indexingsemantic_mapping.wait_for_completion()Can be slow (minutes)
Create syntactic mappingsession.syntactic_mapping.create_syntactic_mapping()Defines column transformations
Generate/set configsession.syntactic_mapping.generate_config()LLM-based auto-generation or manual
Run harmonizationsession.syntactic_mapping.run_data_harmonization()Preferred path
Wait for completioncode_run.wait_for_completion()
Access outputsresult.output_dataset_uids.root[0].root[0].root[0]Triply nested

Key harmonization types: TransformationType.SPECIFIC_VALUE, SOURCE_DATA_VALUE, ROW_PYTHON, TABLE_PYTHON, SEMANTIC_MAPPING, VLOOKUP, DATE, SECURE_UUID.

Target models: SyntacticMappingDataModel.OMOP, .FHIR, .CUSTOM.

Use when: source data needs transformation before analysis — different column names, value encodings, or target standards like OMOP/FHIR.

Template D: SQL Data Ingestion

Pull data from an on-prem database into the Rhino platform.

Auth → Project → Connection Details → SQL Query → Import as Dataset → Verify
StepSDK MethodNotes
Authenticaterh.login()
Get projectsession.project.get_project_by_name()
Define connectionConnectionDetails(server_type=..., server_url=...,...)PostgreSQL, MySQL, etc.
Run metrics on querysession.sql_query.run_sql_query(SQLQueryInput(...))Does NOT return raw data
Import as datasetsession.sql_query.import_dataset_from_sql_query(SQLQueryImportInput(...))Creates a Dataset from query results
Waitsql_query.wait_for_completion()

Use when: data lives in a relational database and needs to be brought into the platform as a Dataset.

Template E: Model Training + Inference

Train a federated model, then run inference on new data. This is Template B applied twice:

  1. Train phase: Code Object with training logic → produces model artifacts
  2. Inference phase: session.code_run.run_inference() using the trained model
StepSDK MethodNotes
Train (Template B)create_code_objectrun_code_objectwait_for_completionFull code object lifecycle
Run inferencesession.code_run.run_inference(code_run_uid, validation_dataset_uids,...)Uses trained model
Get model paramssession.code_run.get_model_params(code_run_uid)Download model weights

Use when: federated ML model training and validation.

Template F: Multi-Pipeline Composition

Chain 2+ templates when a single template cannot satisfy the goal:

Goal patternComposition
Harmonize then analyzeTemplate C → Template A
Ingest from SQL then analyzeTemplate D → Template A
Harmonize then train modelTemplate C → Template E
Ingest, harmonize, analyze, trainTemplate D → Template C → Template A → Template E
Custom preprocessing then analyticsTemplate B → Template A

Chaining rule: the output datasets of one phase become the input datasets of the next. Use result.output_dataset_uids.root[0].root[0].root[0] to extract UIDs and pass them forward.

Step 3: Compose the Plan

  1. Authentication is always Phase 0 — shared across all phases. Include project and workgroup discovery.
  2. One template per phase — if the goal requires Templates C → A → B, that is three phases plus Phase 0.
  3. Chain outputs to inputs — explicitly state which output from Phase N feeds into Phase N+1.
  4. Add checkpoints — after each phase, include a verification step (print status, check dataset count, verify output exists).
  5. Surface prerequisites — list what must already exist vs. what will be created.
  6. Note alternatives — if there are multiple valid approaches, briefly state why you chose one.

Step 4: Generate Implementation

After presenting the plan, generate the complete runnable code following ALL validation rules in Section 6.

Plan Output Format

Structure every planning response as:

## Goal
[1-2 sentence restatement]

## Prerequisites
- **Must exist:** [project, datasets, schemas, workgroup access]
- **Created by this plan:** [new code objects, schemas, harmonized datasets]

## Plan

### Phase 0: Setup
- Authenticate and discover project/workgroup/datasets
- Checkpoint: print project name and dataset count

### Phase 1: [Name] — Template [X]
- Step 1.1: [description] — `session.X.method()`
- Step 1.2: [description] — `session.Y.method()`
- Checkpoint: [how to verify]

### Phase 2: [Name] — Template [Y]
- Depends on: Phase 1 output datasets
- Step 2.1: ...
- Checkpoint: [how to verify]

## Alternatives Considered
[Other approaches and why this plan is preferred]

## Implementation
[Complete, runnable Python script]

Decision Guidance

When the goal is ambiguous, use this table:

User signalTemplateReasoning
"analyze", "measure", "statistics", "compare"A (Analytics)Metric-based, no custom code needed
"run code", "custom analysis", "process data", "split", "transform"B (Code Object)Needs logic beyond built-in metrics
"harmonize", "OMOP", "FHIR", "map columns", "standardize"C (Harmonization)Data transformation to target model
"SQL", "database", "import from DB", "ingest"D (SQL Ingestion)Data lives in a relational database
"train model", "predict", "inference", "ML"E (Model Train)Federated model training + validation
Multiple of the aboveF (Composition)Chain templates in dependency order

Validation Checklist

Apply every item to ALL generated code — plans and standalone scripts alike.

Endpoint Accessors

OperationCorrect accessor
Project-level operations, aggregate/joined metricssession.project
Dataset-level operations, per-site metricssession.dataset
Code objects, builds, runs, harmonizationsession.code_object
Run status, inference resultssession.code_run
SQL queriessession.sql_query
Semantic mappings, vocabulariessession.semantic_mapping
Syntactic mappings, harmonization configsession.syntactic_mapping
Data schemassession.data_schema

Environment

  • Default rh.login() connects to production. For dev/QA/staging, pass rhino_api_url: rh.login(..., rhino_api_url=ApiEnvironment.DEV1_AWS_URL)
  • Import: from rhino_health.lib.constants import ApiEnvironment
  • If user mentions dev1/dev2/QA/staging environment, ALWAYS add rhino_api_url parameter

Import Paths

WrongCorrect
from rhino_health.metrics import Xfrom rhino_health.lib.metrics import X
from rhino_health.endpoints.X import Yfrom rhino_health.lib.endpoints.X.X_dataclass import Y

Metric Calls

  • aggregate_dataset_metric takes List[str] of UIDs: [str(d.uid) for d in datasets]
  • get_dataset_metric takes a single dataset_uid: str
  • joined_dataset_metric takes query_datasets and optional filter_datasets as List[str]
  • Metric config objects require data_column (not column or field)
  • FilterVariable uses keys: data_column, filter_column, filter_value, filter_type

CreateInput Alias Fields

Field nameAlias (use this)
project_uidproject
workgroup_uidworkgroup

Nested Structures & RootModels

  • CodeObjectRunInput.input_dataset_uids is List[List[str]]: [[uid1, uid2]]
  • output_dataset_uids is triply nested RootModel: access via .root[0].root[0].root[0]
  • DataSchema.schema_fields is a SchemaFields RootModel: access list via .root, names via .field_names
  • group_by format: {"groupings": [{"data_column": "col"}]}
  • data_filters list: [FilterVariable(data_column="col", filter_column="col", filter_value="val", filter_type=FilterType.EQUALS)]
  • Enum display: use .value for clean strings (e.g. status.value'Approved')

Async Operations

  • Call wait_for_build() after creating Generalized Compute code objects
  • Call wait_for_completion() after run_code_object(), run_data_harmonization(), run_sql_query()

None Checks

Every get_*_by_name() call must be followed by a None check:

dataset = project.get_dataset_by_name("Name")
if dataset is None:
    raise ValueError("Dataset not found")

Code Template

Every generated script must follow this structure:

import rhino_health as rh
from getpass import getpass
# ... additional imports ...

# For non-production environments, add rhino_api_url:
# from rhino_health.lib.constants import ApiEnvironment
# session = rh.login(username="my_email@example.com", password=getpass(),
#                    rhino_api_url=ApiEnvironment.DEV1_AWS_URL)

session = rh.login(username="my_email@example.com", password=getpass())

PROJECT_NAME = "My Project"
# ... constants ...

project = session.project.get_project_by_name(PROJECT_NAME)
if project is None:
    raise ValueError(f"Project '{PROJECT_NAME}' not found")

# ... core logic ...
print(result)

Metric Selection Tree

Map natural language to the right metric class:

User asks about...Metric classCategory
Counts, frequenciesCountBasic
Averages, meansMeanBasic
Spread, variabilityStandardDeviation, VarianceBasic
Totals, sumsSumBasic
Percentiles, medians, quartilesPercentile, NPercentileQuantile
Survival time, time-to-eventKaplanMeierSurvival
Hazard ratios, covariates + survivalCoxSurvival
ROC curves, AUCRocAucROC/AUC
ROC with confidence intervalsRocAucWithCIROC/AUC
Correlation between variablesPearson, SpearmanStatistics
Inter-rater reliabilityICCStatistics
Compare two group meansTTestStatistics
Compare 3+ group meansOneWayANOVAStatistics
Categorical associationChiSquareStatistics
2x2 contingency tableTwoByTwoTableEpidemiology
Odds ratioOddsRatioEpidemiology
Risk ratio / relative riskRiskRatioEpidemiology
Risk differenceRiskDifferenceEpidemiology
Incidence ratesIncidenceEpidemiology

All metrics: from rhino_health.lib.metrics import ClassName

Execution modes

ScopeMethod
Single sitesession.dataset.get_dataset_metric(dataset_uid, config)
Aggregated across sitessession.project.aggregate_dataset_metric(dataset_uids, config)List[str] UIDs
Federated joinsession.project.joined_dataset_metric(config, query_datasets, filter_datasets)

Filtering example

from rhino_health.lib.metrics import Mean, FilterType, FilterVariable

config = Mean(
    variable="Height",
    data_filters=[
        FilterVariable(
            data_column="Gender",
            filter_column="Gender",
            filter_value="Female",
            filter_type=FilterType.EQUALS,
        )
    ],
    group_by={"groupings": ["Gender"]},
)

Error-to-Fix Reference

When the user encounters an error, diagnose using this table:

Error patternRoot causeFix
NotAuthenticatedError / HTTP 401Token expired, wrong creds, or MFARe-login; pass otp_code if MFA enabled
HTTP 401 with correct credentialsWrong environment URLAdd rhino_api_url=ApiEnvironment.DEV1_AWS_URL (or QA/staging). Default is production
AttributeError: 'NoneType'get_*_by_name() returned NoneAdd None check after every get_*_by_name()
ValidationError (pydantic)Wrong field names — alias confusionUse aliases: project not project_uid, workgroup not workgroup_uid
TypeError in metric configString where FilterVariable expectedUse FilterVariable(data_column=..., filter_column=..., filter_value=..., filter_type=...)
ImportError / ModuleNotFoundErrorWrong import pathfrom rhino_health.lib.metrics import X (NOT rhino_health.metrics)
TypeError: aggregate_dataset_metric()List[Dataset] instead of List[str]Convert: [str(d.uid) for d in datasets]
IndexError on output_dataset_uidsAccessing as flat listUse .root[0].root[0].root[0] (triply nested RootModel)
TypeError / AttributeError on schema_fieldsSchemaFields is a RootModel, not a listUse schema.schema_fields.root for the list, .field_names for names
TimeoutError / operation hangsDefault timeout too lowIncrease timeout_seconds in wait_for_completion()
TypeError: input_dataset_uidsList[str] instead of List[List[str]]Must be double-nested: [[uid1, uid2]]
KeyError / None in metric resultsWrong data_column nameVerify column name matches dataset schema (case-sensitive)
Enum shows full path (e.g. Status.APPROVED)Printing enum object directlyUse .value for clean string: status.value'Approved'
ValidationError on enum field (e.g. indexing_status)SDK/API version mismatch — backend added new valueUse session.get() raw API escape hatch (§17 in patterns_and_gotchas.md), or pip install --upgrade rhino-health

Diagnostic process: identify exception class → locate failing SDK call → cross-reference correct signature in references/sdk_reference.md → check for compound errors.

Question Routing

For non-planning SDK questions, locate the right context section:

Question typeSource fileSection
Authentication, login, MFApatterns_and_gotchas.md§1
Finding projects/datasets by namepatterns_and_gotchas.md§2
Creating/updating resources (upsert)patterns_and_gotchas.md§3
Running per-site or aggregated metricspatterns_and_gotchas.md§4
Filtering datapatterns_and_gotchas.md§5
Group-by analysispatterns_and_gotchas.md§6
Federated joinspatterns_and_gotchas.md§7
Code objects (create, build, run)patterns_and_gotchas.md§8
Async operations / waitingpatterns_and_gotchas.md§9
Correct import pathspatterns_and_gotchas.md§11
Environment URL (dev1, QA, staging)patterns_and_gotchas.md§13
RootModel access (SchemaFields, output UIDs)patterns_and_gotchas.md§14
Semantic mapping entries / datapatterns_and_gotchas.md§15
Session persistence / SSOpatterns_and_gotchas.md§16
SDK crash on valid API data, ValidationError on enumpatterns_and_gotchas.md§17
Raw API calls, session.get(), bypassing Pydanticpatterns_and_gotchas.md§17
Vocabularies, vocabulary typessdk_reference.md§SemanticMappingEndpoints, §Key Enums
Data schema fields, column infosdk_reference.md§DataSchema, §SchemaFields
Specific endpoint methodssdk_reference.md§[EndpointName]Endpoints
Enums and constantssdk_reference.md§Key Enums
API environment URLssdk_reference.md§ApiEnvironment
Metric configurationmetrics_reference.md§[Category]
"Which metric for...?"metrics_reference.md§Quick Decision Guide

Working Examples

Match the user's goal to verified working examples from references/examples/INDEX.md:

TemplateExample files
A (Analytics)eda.py, cox.py, metrics_examples.py, roc_analysis.py, aggregate_quantile.py, federated_join.py
B (Code Object)train_test_split.py, runtime_external_files.py
C (Harmonization)fhir_pipeline.py
D (SQL Ingestion)sql_data_ingestion.py
E (Model Training)train_test_split.py (training portion)
F (Composition)fhir_pipeline.py (harmonization + code object + export)

Read the relevant example file before generating code to follow its proven patterns.

适合场景

01

用户想查找某类 Agent Skill 时

02

需要根据任务场景推荐可安装能力包时

03

需要对比不同来源的安装命令和来源信息时

能力概览

能力 1

按任务关键词查找相关 Skills

能力 2

展示可复制的安装命令

能力 3

保留来源站点、仓库和原始说明,方便继续核验

能力 4

展示第三方安全扫描或审计结果

安装后应在对应宿主中按原始 README 的触发条件使用;具体调用方式请以来源页面和 README 为准。

平台分布

Codex

38.93%
按下载量换算42

Claude

28.84%
按下载量换算31

Cursor

16.76%
按下载量换算18

Gemini CLI

9.23%
按下载量换算10

安全审计

Gen Agent Trust Hub

通过

Socket

未通过

Snyk

可疑

权限和风险

需要联网

该 Skill 可能需要联网访问来源站点、仓库或外部 API;具体网络访问范围需要结合源码和 README 复核。

安装前确认

本站仅展示第三方公开信息,不托管安装包,不提供自动安装或运行环境。安装前应自行审查源码、依赖和命令行为。来源安全扫描存在 warning/failed 结果,不能写成本站确认安全。当前只有一个来源,正式发布前建议补源仓库或其他目录站核验。

来源信息

继续浏览同类 Skills