# Hardi agents V2 — training

Contract: 2. Revision: 2026-11-03. Status: available to active verified Hardi accounts; Free, Plus and Pro retain their native limits.

# Own Training history and results

training:read grants only the connected user’s personal results and exercise performances. training:write is separate and requires training:read. No client-supplied participant identity, Team data, coach notes or other people’s results. Own history summaries include scores and titles, not workout bodies or privileged links. A source ID never bypasses native source access.

Read hardi_get_training_history for workout results. Read hardi_get_performances with exerciseId for physical performances. Default thirty days, maximum ninety civil days, default twenty items, maximum fifty; follow the signed cursor with the same filters and page size. Native account timezone determines history boundaries. No complete-history count, N+1 reads or records/percentile recalculation. SQL statements are limited to two seconds; one concurrent read per account and four for the pilot. With weighted admission enabled, attempts share the account and pilot work budgets exposed by context; the legacy daily read ceilings do not apply. Outside that profile, each admitted attempt, including a failed read, consumes the legacy 200/account and 2,000/pilot daily budgets. Result data stays below 48 KiB inside the 64 KiB HTTP envelope.

To record a workout score, read hardi_get_training_result with subjectKind, subjectId and blockId, then training.result.upsert with the returned expectedVersion, native score and optional division. This requires workouts:read and, for a selected calendar session, planning:read. Only your authorized personal sources support writes. Your native Training profile must already exist with its category. Native scoring formats, versions, completion and leaderboard capacity apply; personal notes, their existing visibility and RPE are preserved and never returned to the agent. A score can update an already visible native leaderboard; sharing settings are not changed.

For a physical performance, read hardi_get_performance_tests (also catalog:read), then training.performance.create with exerciseId and input: testId, testVersionId, performedOn, timeZone, value, repetitions and configuration. Native persisted timezone, published protocol, units and configuration are enforced. Corrections use training.performance.update with performanceId, current expectedVersion and input. Native record selection reconciliation and existing percentile invalidation remain bounded; no new background worker is added.

Result and performance batches are atomic and idempotent, sharing the active account/pilot admission policy with other actions. The old twenty daily executions apply only outside weighted admission. They have no agent undo because dependent record/leaderboard effects cannot be safely reversed as a simple snapshot. Read and correct with a fresh version. There are no Hardi LLM/Vision calls, Energy charges, polling or continuous synchronization. Database and bandwidth costs remain real. Account, Training reads and Training writes have independent deployment switches.

CLI: hardi training history --from YYYY-MM-DD --to YYYY-MM-DD --limit 20; hardi training result --file target.json; hardi training record-result --file score.json; hardi performances tests <exercise-id>; hardi performances list <exercise-id>; hardi performances create <exercise-id> --file performance.json; hardi performances update <performance-id> --exercise <exercise-id> --expected-version <version> --file performance.json. Performance files contain an input object. All support machine-readable --json; writes support optional --dry-run.

workout-results:read is separate, unchecked by default, and permits read-only native coach-visible participant results on an authorized library workout or scheduled occurrence. hardi_get_workout_results takes source, exactly its workoutId/scheduledWorkoutId, blockId, optional category/division, limit (maximum 20) and cursor. Follow the same filters and page size; changes invalidate the cursor. Native anonymization and hidden-result rules apply. No athlete auth IDs, emails, avatars or unrelated history. CLI: hardi workouts results <workout-id> --block <block-id>; hardi planning results <occurrence-id> --block <block-id>.
