Token导航 LogoToken导航

Agent Skill · 研究检索

rhino-sdk(rhino SDK 搜索)

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

rhino-sdk 是研究检索类 Agent Skill,可用宿主为 Codex、Claude、Cursor、Gemini CLI,通过GitHub 仓库获取,权限为需要联网;许可证信息还不明确,第三方扫描有未通过项,按安装量在研究检索类的 73,675 个 Skill 里排第 64,068。

总安装 306周安装 13GitHub Stars 公开资料未说明下载 107核验 2026-05-01

安装说明

本站只整理中文说明,不托管安装包,也不代用户安装。
GitHub
许可证
unknown

安装方式

通过对话安装

复制提示词发给支持本地命令或 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

这个 Skill 是做什么的

研究检索类 Skill 主要解决「找资料、核对事实、把来源整理清楚」的问题,通常会让助手先检索再总结。

rhino-sdk 用于查找、检索和筛选相关信息,适合在 Codex、Claude、Cursor、Gemini CLI 中快速定位候选结果。适用于基于关键词或任务场景的信息聚合场景。可通过 npx 命令从 rhino-sdk-skills 仓库安装,建议查看原始 README 了解具体用法。

使用前需确认权限范围和维护状态,警惕可能的联网或文件读写行为。输出内容应以原始 README 和项目事实为依据,不直接作为最终结论。

来源仓库内路径:skills/rhino-sdk

上手步骤

4 步
  1. 1

    确认自己的宿主工具

    公开资料标注支持 Codex、Claude、Cursor、Gemini CLI;先确认自己用的是其中之一,再按对应工具的 Skills 目录放置。

  2. 2

    拿到安装命令

    可以直接复制的命令是 npx skills add https://github.com/naverazy-rhino/rhino-sdk-skills --skill rhino-…;命令里的占位符换成自己的路径或密钥再执行。

  3. 3

    安装后重启宿主

    命令执行完要完全退出宿主工具再打开,让新装的 Skill 被重新扫描到,否则列表里可能看不到。

  4. 4

    按最小权限试用

    它需要需要联网,先在测试目录或测试账号里跑,确认没问题再放到正式项目。

常见问题

6 条

rhino-sdk 怎么安装?

在终端执行 npx skills add https://github.com/naverazy-rhino/rhino-sdk-skills --skill rhino-sdk。装完完全退出宿主工具再打开,让它重新扫描本地 Skill。

rhino-sdk 支持哪些 AI 工具?

公开资料标注支持 Codex、Claude、Cursor、Gemini CLI。其他工具只要能读取本地 Skill 目录,一般也能手动放进去,但要自己确认触发方式是否一致。

rhino-sdk 需要什么权限?

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

rhino-sdk 是免费的吗?

公开资料没有标注明确许可证,收费和商用限制都无法确认。正式使用前请到来源仓库核对授权说明。

rhino-sdk 用的人多吗?

公开数据是累计安装 306 次,近一周安装 13 次,下载 107 次。这些数字来自第三方目录统计,只能当作热度参考,不代表质量或安全性。

rhino-sdk 安全吗?

第三方扫描有未通过项,风险较高。除非你确认过源码,否则不建议直接安装到常用环境。

值得选的地方和要先想清楚的地方

值得选的地方

  • 同时适配 4 种工具,换客户端不用重新找替代品。

先想清楚的地方

  • 许可证没有明确标注,能不能商用、能不能再分发都不确定。
  • 第三方扫描存在提醒项或未通过项,需要人工逐条确认。
  • 第三方目录整理,版本更新和行为细节以来源仓库为准。

适不适合你

更适合

  • 已经在用 Codex,想直接扩展它能力的人。
  • 需要处理研究检索类任务、又不想每次都手写提示词的人。

不太适合

  • 需要明确授权才能用到公司项目里的场景。
  • 需要厂商级技术支持和 SLA 的生产系统。

研究检索类 Skill 对比

6 个同类
Skill总安装GitHub 星权限许可证扫描
find-skills

寻找技能 · Codex、Claude

31,199,81316,486操作浏览器MIT有提醒
self-improving-agent

自我改进 Agent · OpenClaw

16,464,0023,396接触敏感数据MIT-0通过
soultrace

灵魂追踪 · Codex、Claude

7,588,94412需要联网未明确有提醒
self-improving

自我完善 · OpenClaw

6,829,2841,046需要联网MIT-0通过
microsoft-foundry

微软代工厂 · Codex、Claude

6,614,144764调用外部服务未明确有提醒
rhino-sdk

rhino SDK 搜索 · 本页

306—需要联网未明确未通过

按安装量取同分类前几名;数字来自第三方目录统计,只作热度参考,不代表质量结论。

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 Reference — references/sdk_reference.md Endpoint classes, methods, enums, CreateInput summaries, dataclass fields, import paths.
  2. Patterns & Gotchas — references/patterns_and_gotchas.md Auth patterns, resource lookup, metrics execution, filtering, code objects, async, and pitfalls.
  3. Metrics Reference — references/metrics_reference.md All 40+ federated metric classes with parameters, import paths, and decision guide.
  4. Example Index — references/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_object → run_code_object → wait_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.

平台分布

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 复核。

安装前确认

本站仅展示第三方公开信息,不托管安装包,不提供自动安装或运行环境。安装前应自行审查源码、依赖和命令行为。来源安全扫描存在提醒或未通过项,安装前请自行复核。目前只有一个公开来源,建议同时核对源仓库。

继续浏览同类 Skills