From itero
Lists Itero learning paths and certifications and assigns or reassigns them to users via the public API. Use when someone wants to: see what learning paths or certifications exist on the tenant, see who a path is assigned to, assign a learning path or certification to one or more reps, reassign one (e.g. a retake after a failed certification), or set a due date. Triggers on: "assign the learning path", "assign the certification", "who has this path", "reassign", "give the new reps the onboarding path", "list learning paths", "set a due date for the certification".
How this skill is triggered — by the user, by Claude, or both
Slash command
/itero:learning-pathsThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Assign and reassign Itero learning paths and certifications to tenant users via
Assign and reassign Itero learning paths and certifications to tenant users via
the public API. Backed by scripts/learning_paths.py.
<skill-dir> below means the folder containing this SKILL.md (announced when the
skill loads). Under a Claude Code plugin install this is the skills/learning-paths
subfolder of the plugin root; under a manual install it is the skill folder
inside your agent's skills directory. All scripts run via uv run —
dependencies resolve automatically (PEP 723).
This skill assigns and reassigns. Creating or editing learning paths is Studio-only; there is no public API for it — do not promise otherwise.
Reads ITERO_API_KEY from .env. For multi-tenant repos, pass --tenant <NAME>
to use ITERO_API_KEY_<NAME> instead.
uv run "<skill-dir>/scripts/learning_paths.py" list [--tenant NAME]
| Need | Where |
|---|---|
| Full response schemas / DTO fields | learning-path-api.md — "Response Schemas" |
| Assign vs. reassign semantics | learning-path-api.md — "Assign vs. Reassign Semantics" |
tenantUserId vs id trap | learning-path-api.md — "tenantUserId — not id" |
| Status enum meanings | learning-path-api.md — "Enums" |
| Error codes | learning-path-api.md — "Errors" |
uv run "<skill-dir>/scripts/learning_paths.py" list [--type 0|1] [--tenant NAME]
--type filters by kind:
0 — Learning Path (standard, untimed)1 — Certification (pass thresholds enforced; may be retriable)Omit --type to see everything. Output shows id, type label, title, stage
count, ordered flag, and retriable flag. Run this first whenever the user asks
what paths exist or before any assign/reassign operation.
uv run "<skill-dir>/scripts/learning_paths.py" fetch <id> [--tenant NAME]
Returns the full details JSON: stages (ordered list of practice scenario
references) plus all current assignments with tenantUserId, dueDate, and
status. Status values (0–5) are integers; for what each means (New,
InProgress, Overdue, Completed, Failed, Canceled) route to the reference:
learning-path-api.md — "Enums".
Follow these steps in order.
uv run "<skill-dir>/scripts/learning_paths.py" list [--tenant NAME]
Confirm the path id with the user before proceeding.
uv run "<skill-dir>/scripts/learning_paths.py" users [--role Representative|Manager] [--active true|false] [--tenant NAME]
Critical — two-ID trap. The tenant user record exposes two integers: id
and tenantUserId. Assignment requires tenantUserId, NOT id. Passing id
will silently target the wrong user or produce a 400. The users subcommand
prints both side-by-side and labels the columns so there is no ambiguity.
Before any API call, show the user a preview table:
| Path title | Users (name) | Due date |
|---|---|---|
| <title from list> | <names from users output> | <YYYY-MM-DD or none> |
Wait for explicit yes before continuing.
uv run "<skill-dir>/scripts/learning_paths.py" assign <id> --user-ids <id1,id2,...> [--due YYYY-MM-DD] [--tenant NAME]
The script is dry-run by default (no --live). Review the printed payload and
confirm it looks correct.
uv run "<skill-dir>/scripts/learning_paths.py" assign <id> --user-ids <id1,id2,...> [--due YYYY-MM-DD] [--tenant NAME] --live
What happens after:
Due date notes:
--due accepts a bare YYYY-MM-DD; the script sends it as end-of-day UTC
(T23:59:59Z).400.--due entirely to assign with no deadline.Use reassign when:
Warn the user before going live: reassign cancels the active assignment and starts a new one — all prior stage progress is lost and cannot be recovered.
# dry-run first
uv run "<skill-dir>/scripts/learning_paths.py" reassign <id> --user-ids <id1,id2,...> [--due YYYY-MM-DD] [--tenant NAME]
# live
uv run "<skill-dir>/scripts/learning_paths.py" reassign <id> --user-ids <id1,id2,...> [--due YYYY-MM-DD] [--tenant NAME] --live
The same tenantUserId rules and --due format from Flow 3 apply here.
| Error | What to do |
|---|---|
missing env var ITERO_API_KEY… | Add ITERO_API_KEY=<key> to .env (or ITERO_API_KEY_<NAME> for --tenant NAME) |
404 on path id | Run list to confirm the id exists on this tenant |
400 validation error | Check that all --user-ids values are tenantUserId integers from the users output (not id), and that --due is a future date |
403 Forbidden | Learning-path endpoints need a Manager-role key; the users subcommand hits an Owner-documented tenant endpoint — if only users 403s, the key lacks Owner |
401 Unauthorized | Missing or invalid X-API-Key — verify the value in .env |
npx claudepluginhub itero-ai/skills --plugin iteroProvides CDSS development patterns for drug interaction checking, dose validation, clinical scoring (NEWS2, qSOFA), and alert classification integrated into EMR workflows.