关于 terra-models
terra-models 是一项技能,用于对已连接用户的数据运行 Terra API 健康模型并解读结果,涵盖睡眠安排、周期指标和补全指标,并说明如何处理不支持的数据与错误。
主要功能
- 01运行三种已发布的健康模型
- 02说明模型输入与输出
- 03区分不支持、无数据和错误
- 04查看模型运行记录与额度消耗
- 05介绍 CLI 和 MCP 管理方式
适用场景
- 01生成睡眠安排洞察
- 02查看日期范围内的周期指标
- 03补全记录中缺失的健康指标
MCP 相关
该技能介绍通过 Terra 管理 MCP 服务执行账户命令,包括查看模型目录和运行日志。模型运行本身通过 Terra API 端点完成。
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ tryterra/ agent-skills --skill terra-models安装后在 Claude Code 中输入/terra-models确认已加载。
附带文件metadata.jsonREADME.md
详细介绍
Terra API 模型
针对已连接用户的数据,在指定日期范围内运行 Terra API 的一项健康模型,即可获得可直接使用的洞察:一次请求,返回一条洞察。无需托管模型。每个模型都是健康指标,而非医疗或诊断工具;切勿将其输出描述为临床结果。
账户工具:CLI 或 MCP
Models 有自己的账户命令,其中包括运行日志,可查看运行结果为何与预期不符:
terra models catalog list # the models available, account-wide
terra models runs list --env <dev-id> --status error # failed runs
terra models runs list --env <dev-id> --user-id <uuid> --model <model>
terra models runs list --env <dev-id> --run-id <run_id> # one run, by id
关于该日志,有两点需要注意。默认情况下,日志保留 30 天,因此较早的运行记录不会出现在其中;页面为空也不能证明运行从未发生。不过,--run-id 会将查询范围扩展到所有保留的历史记录,因此只要你有运行 ID,就不会受时间窗口限制。
无论是否返回洞察,每次运行都会消耗一个点数。因此,runs list --status error 也是最快的方式,可查看有多少点数花在了未产生任何结果的运行上。
在编码 Agent(Claude Code、Codex、Cursor 等,无论运行在用户的设备还是云端)中,请使用 CLI;如果尚未安装,请主动提出安装:在 macOS 和 Linux 上运行 curl -fsSL https://cli.tryterra.co/install.sh | sh,在 Windows PowerShell 中运行 irm "https://cli.tryterra.co/install.ps1" | iex,或者在用户已使用 Homebrew 或 npm 的情况下,通过这些工具安装。在聊天助手(claude.ai、Claude Desktop、ChatGPT)中,请使用 Terra API 管理 MCP 服务,即使它能够运行代码也是如此:其沙盒无法安装 CLI 或登录。每个管理命令的工具名称和 method 都对应其命令(terra users list 对应 users_read,且 method: "list")。只有 CLI 支持 terra data-api、terra admin-api 和 terra examples;--select 和 --jq 也没有对应的 MCP 功能。terra-cli 和 terra-mcp 技能包含相关防护措施(确认更改、防止凭据出现在对话记录中)、错误说明,以及按任务分类的操作指南。这些工具用于管理集成,不会替代本技能介绍的 API 调用。
适用场景
构建调用 GET /v2/models 或 GET /v2/models/run、为 model_run 用量定价,或将用户的 Terra API 数据转化为睡眠时间表、月经周期或补全缺失指标洞察的功能。
先连接用户
模型会针对你通过 Unified API 连接的用户运行(参见 terra-unified-api 技能),并使用你选择的日期范围。对于特定用户和日期范围,模型不一定总能返回洞察;无法返回时,你会得到不支持结果或错误,而无论哪种情况,本次运行仍会消耗一个点数(参见“读取结果”和“定价”)。
三种模型(普遍可用)
model id | 返回内容 | 所需数据 |
|---|---|---|
sleep_window | 建议的就寝时间、起床时间和卧床时长;0–100 的规律性评分及其等级;以及最能改善该评分的一项调整 | 用户历史记录中的跨夜睡眠时段 |
cycle_phase_tracker | 每日月经周期阶段,以及从跨夜生理数据中检测到的月经开始时间和易孕期,并为每项提供置信度等级 | 至少 30 天包含心率和 HRV 的跨夜睡眠数据 |
graph_impute | 智能填充:所选表格中某一天的指标,并标明哪些由设备记录、哪些由模型重建 | 该用户在你所选表格中的已记录历史 |
sleep_window、cycle_phase_tracker 和 graph_impute 均已正式发布(GA),并有文档说明。请将任何其他模型 id 视为正式发布前且不稳定的版本:可能可以运行,但其响应结构可能随时变更,恕不另行通知。
cycle_phase_tracker 是健康指标,不是医疗或避孕工具;它仅根据生理数据检测月经开始时间,不需要也不会读取用户记录的月经日期。
发起运行
GET https://api.tryterra.co/v2/models/run
查询参数:model、user_id、start_time、end_time(均为 ISO 8601 格式)。请求头:x-api-key 和 dev-id(使用你自己的密钥;这不是特权端点)。
graph_impute 还需要一个参数:table,其值为 sleeps、dailies 或 activities 之一。 如果未提供该参数,端点会拒绝运行,而不会替你选择表格;因此,仅根据通用参数列表构建的请求会返回 400。这三个表格包含不同的指标。
curl --request GET \
'https://api.tryterra.co/v2/models/run?model=sleep_window&user_id=USER_ID&start_time=2026-04-01T00:00:00Z&end_time=2026-07-01T00:00:00Z' \
--header 'x-api-key: YOUR_API_KEY' \
--header 'dev-id: YOUR_DEV_ID'
在构建请求或响应类型前,请获取 https://docs.tryterra.co/models/models.md,查看准确的参数和各模型的完整响应架构;不同模型的响应结构各不相同,且会不断演进。获取页面前,请先询问 terra docs ask(或通过 MCP 使用 docs_ask):它会根据文档作答并引用来源。任何文档 URL 后都可追加 .md 以获取 Markdown 格式。
读取结果(Agent 最容易出错的部分)
- 不支持的设备会返回 200,而不是错误。 如果用户的设备或服务提供方无法生成该模型,运行会返回 HTTP 200,并以
unsupported: true(以及unsupported_reason和supported/supported_devices)代替洞察结果。请将其作为正常结果处理并告知用户,而不是视为失败。 - 真正的错误就是错误。 输入错误或缺失会返回
4xx,而无法计算运行结果(例如范围内数据过少)可能会返回5xx。响应格式为 RFC 7807 problem+json(包含title、detail,验证错误还包含errors[]),例如400 unknown model、404 invalid user id。这与上述可正常处理的unsupported情况不同;不要忽略这类错误。 - 每次运行都会计费,包括失败的运行。 运行会在计算前计量,因此不支持或出错的运行仍会消耗一个额度。请预先验证模型 ID、用户和设备是否受支持,不要盲目尝试。
- 结果为空并不总是
unsupported。sleep_window对无法服务的设备使用unsupported/unsupported_reason,对历史数据不足的用户使用no_data/no_data_reason。cycle_phase_tracker仅使用no_data/no_data_reason。请处理这两组键;不要只根据unsupported进行分支判断。 - 不同模型的结果结构各不相同。
sleep_window返回一个window对象(recommended_bed/recommended_wake是当地时钟时间;approximate: true表示根据有限历史数据估算了作息安排)、一个sleep_regularity对象(score为 0–100,band为 Low/Fair/Good/Excellent),以及一个recommendation对象(change、reason、moves_to、gain),除非用户的作息已经规律,否则该对象会指出最能提升分数的一项调整。cycle_phase_tracker返回results,以及periods和fertile_windows。graph_impute返回table、features和results。 sleep_window会忽略你传入的范围。 它会读取用户的全部睡眠历史,因此start_time和end_time不会影响结果。不要设计让用户误以为选择时间范围会改变作息安排的 UI。cycle_phase_tracker的results不是答案列表。 其中包含所请求日期范围内的每个日历日对应的一行,包括模型没有数据的日期,因此results.length绝不能作为数据覆盖情况的信号。请根据每一行的available进行分支判断。读取*_confidence等级(low/medium/high),不要读取原始概率;另请注意,经期日绝不会同时是易孕日。- 对于
graph_impute,computed和reported是关键。 每天的fields中,每个条目在设备实际记录了该值时会包含reported: true,在模型重建了该值时会包含computed: true;重建的值还会带有confidence。切勿将计算出的值呈现为设备记录的值。 - 响应中的
data_type与目录中的data_type不同。 目录报告的是模型读取的数据(sleep_window→sleep);运行响应报告的是自身的值(sleep_window→sleep_window)。不要根据其中一个来断言另一个。 truncated: true表示运行触及了每次请求的数据上限;洞察仍然有效,但只根据该范围内有限的一部分数据计算得出。- 模型输出只是可信度有限的指标。不要将单个结果视为权威结论。
定价
按使用量计费:每次模型运行 $0.01,从套餐的月度额度中扣除。一次运行是针对一个用户、一个日期范围运行一个模型,无论该范围包含多少数据;运行两个模型,或对两个用户运行同一个模型,都算两次运行。从 Terra API 仪表板发起的运行和通过此 API 发起的运行,计费路径完全相同。详情:https://docs.tryterra.co/unified-api/pricing
边界
- 不是 Unified API。 连接用户、Webhook 和历史数据属于 Unified API(
terra-unified-api);模型运行会分析已连接用户的数据并返回一条洞察。 - 不是 Health Scores。 Health Scores 是持续的生理评分;模型通过单次调用按需返回一条离散的洞察。