一键导入
strength-intake
Convert a user's narrated strength session into structured `hai intake gym` calls. Judgment-only — all name resolution and parsing lives in code.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
Convert a user's narrated strength session into structured `hai intake gym` calls. Judgment-only — all name resolution and parsing lives in code.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
Partition unstructured user narration into the typed `hai intake` commands the runtime expects. Use when the user volunteers information outside a form — readiness, gym sets, nutrition, subjective stress, or free-text context. Also drives the session-start gap-filling protocol: read `hai intake gaps`, compose ONE consolidated question, route the answer. You route; you do not interpret.
Authoritative mapping from user natural-language intent to `hai` CLI workflow sequences. Reads the `hai capabilities --json` manifest as the source of truth for which commands exist, what they mutate, and what exit codes they return. Never mutates state itself — it composes invocations of other `hai` subcommands that cross the determinism boundaries. Always surfaces the proposed pipeline before any mutation command runs. Teaches the agent `hai` the way Claude already knows `gh`.
Fail-closed boundaries for the health agent. Defines what the system must not claim, when to refuse, and how to handle ambiguous or unsafe signal.
Reconcile per-domain proposals into a coherent daily plan by composing rationale and uncertainty across domains. The runtime already applied every Phase A X-rule mutation mechanically; this skill adds the human-legible joint narration on top. It never computes bands, evaluates R-rules, or applies X-rule mutations — those are runtime-owned.
Answer bounded questions about what a term means in this system, or why a runtime rule would fire, using only the allowlisted local source registry under `hai/src/health_agent_infra/core/research/`. Read-only. Cite or abstain. Never mutates recommendations, never triages, never diagnoses.
Produce a bounded NutritionProposal for today by consuming the runtime-computed `classified_state` + `policy_result` and applying judgment-only steps — action matrix, rationale prose, honest handling of micronutrient unavailability. The runtime already did every band, every score, and every R-rule; this skill does not re-derive them. Macros-only v1 per the Phase 2.5 retrieval-gate outcome.
| name | strength-intake |
| description | Convert a user's narrated strength session into structured `hai intake gym` calls. Judgment-only — all name resolution and parsing lives in code. |
| allowed-tools | Read, Write, Bash(hai exercise search *), Bash(hai intake gym *) |
| when_to_use | When the user describes a resistance-training session in free text ("back squats 5×5 at 100kg, then bench 4×5 at 80kg") and the harness has a state DB available. Not for numeric dumps via `hai intake gym --session-json` — those are already structured. |
You own disambiguation and clarification, not parsing or matching.
unmatched_exercise_tokens_json so the user can decide later.The following lives in code (domains/strength/taxonomy_match.py +
core/state/projectors/strength.py). Do not reimplement any of it
here:
exercise_id.domains/strength/classify.py).hai intake gym accepts.If you find yourself writing a regex, a threshold, or a ranking rule, stop and file it as a code change instead.
Extract the raw references from the user's message: each mention of an exercise plus its set structure (sets × reps × weight, optional RPE).
Resolve each exercise by calling:
hai exercise search --query "<user's phrasing>" --limit 5
Inspect the hits array:
match_reason == "exact_canonical" or
match_reason == "exact_alias", treat the match as confirmed.unmatched_exercise_tokens_json), or
(b) skip the set.Parse the set structure into per-set tuples. The CLI already accepts either mode — pick whichever fits:
--session-json bulk mode when the session has multiple
exercises or many sets.Invoke the CLI with the confirmed names. Example bulk invocation:
hai intake gym --session-json ./session.json \
--as-of 2026-04-18 --user-id u_primary \
--base-dir ~/health/writebacks \
--db-path ~/Library/Application\ Support/health_agent_infra/state.db
where session.json is:
{
"session_id": "2026-04-18-legs",
"session_name": "Legs",
"as_of_date": "2026-04-18",
"sets": [
{"set_number": 1, "exercise_name": "Back Squat", "weight_kg": 100.0, "reps": 5},
{"set_number": 2, "exercise_name": "Back Squat", "weight_kg": 110.0, "reps": 5},
...
]
}
Echo the result back to the user. Mention:
exact_* match).supersedes_set_id chain explicitly.hai exercise search in a loop to auto-expand the
taxonomy. User-defined entries arrive only through a deliberate
hai intake exercise invocation the user approves.exercise_id yourself. You hand free-text to
hai intake gym; the CLI (via the code-owned matcher) stamps the
id when the match is unambiguous and leaves NULL otherwise.When echoing results back, mirror the code-owned tiers from
ExerciseMatch:
exact — canonical name match, silent (no confirmation needed).alias — alias match, silent unless the alias is plausibly
ambiguous in context.ambiguous — multiple taxonomy rows share the alias; surface the
alternatives and ask.no_match — unresolved; surface the user's raw phrasing and ask
whether to leave as free-text or skip.The tiers are your vocabulary, not your decision surface — the code has already decided which tier applies.