{"schema_version":"athos.agent-setup.v1","name":"Athos","description":"Coach from the saved Athos program, adapt workouts and programming, resume onboarding, and open the existing authenticated app.","environment":"production","setup_page":"https://app.athos.fitness/connect","agent_instructions":"https://app.athos.fitness/connect/agent.md","mcp":{"url":"https://app.athos.fitness/mcp","transport":"streamable-http"},"oauth":{"issuer":"https://app.athos.fitness","protected_resource_metadata":"https://app.athos.fitness/.well-known/oauth-protected-resource/mcp","authorization_server_metadata":"https://app.athos.fitness/.well-known/oauth-authorization-server","scopes":["app:open","coaching:write","onboarding:read","onboarding:write","program:read","program:write"],"read_only_scopes":["onboarding:read","program:read"],"scope_parameter":"app:open coaching:write onboarding:read onboarding:write program:read program:write","pkce":"S256","client_registration":"dynamic"},"user_action_required":["approve_client_configuration","sign_in_or_sign_up_and_consent","approve_review_before_generation"],"tool_scopes":{"athos_get_connection":"program:read","athos_get_program":"program:read","athos_get_onboarding":"onboarding:read","athos_save_onboarding_turn":"onboarding:write","athos_prepare_onboarding_review":"onboarding:write","athos_correct_onboarding_review":"onboarding:write","athos_confirm_onboarding":"onboarding:write","athos_retry_initial_generation":"onboarding:write","athos_get_planning_questions":"program:read","athos_answer_planning_question":"coaching:write","athos_modify_workout":"program:write","athos_replan_week":"program:write","athos_update_program":"program:write","athos_replace_program":"program:write","athos_plan_next_week":"program:write","athos_get_change_status":"program:read","athos_answer_change_question":"program:write","athos_answer_operation_question":"program:write","athos_get_workout":"program:read","athos_search_exercises":"program:read","athos_edit_workout":"program:write","athos_open_app":"app:open"},"experience":{"interview_minutes":5,"generation_minutes":15},"app_handoff":{"tool":"athos_open_app","presentations":["panel","browser"],"expires_in_seconds":120,"permission":"app:open","credentials":"component_only","fallback":"ordinary_url_and_sign_in"},"workflow":["Read the authenticated connection and saved onboarding first; resume rather than restart. Introduce a new interview as about 5 minutes. Offer to reuse only relevant explicit facts already shared, confirm the proposed details once before saving, and ask only missing questions.","After the athlete approves the exact review and Athos accepts generation, promptly explain that building usually takes about 15 minutes and can take longer. They may leave and return. Offer the optional TestFlight app and coach texting only according to the returned activation state; never promise an unverified text.","Offer to open Athos beside the conversation or provide a fresh single-use browser link. Call athos_open_app with presentation=panel or presentation=browser only after the athlete chooses. Browser presentation must not load the panel or open a window automatically. The secure card offers Open/Copy and obtains a new two-minute link for each action; never reuse a handoff already consumed by the panel.","App access requires app:open, requested with the connection's other permissions in one connection consent. The athlete may choose Read Only instead; then onboarding saves, plan changes and signed-in app handoffs require a new connection approval. Account security, data-sharing setup and administration require direct Athos sign-in. Never copy private _meta handoff credentials into chat, prompts, logs, or project files. Hosts without app UI can share the ordinary returned Athos URL and use normal sign-in; do not claim a panel opened or a single-use signed-in link was delivered there."],"setup":{"codex":{"inspect_argv":["codex","mcp","list"],"add_argv":["codex","mcp","add","athos","--url","https://app.athos.fitness/mcp"],"login_argv":["codex","mcp","login","athos"],"instructions":"In Codex Desktop, open Settings > MCP servers and add a Streamable HTTP server with the URL above, then authenticate when prompted. Desktop and CLI share configuration on the same host; do not add a duplicate. Use /mcp to inspect active connections, then perform the authenticated reads below.","documentation":"https://learn.chatgpt.com/docs/extend/mcp?surface=cli"},"claude":{"label":"Claude web / Desktop","instructions":"Open Customize > Connectors (Settings > Connectors in some versions), add a custom connector named Athos with the MCP URL above, then Connect and complete Athos browser sign-in and consent. Enable the connector in the conversation. Availability depends on account and workspace policy; Team/Enterprise may require an owner to add the connector first. Do not invent an OAuth client ID or secret.","documentation":"https://support.claude.com/en/articles/11175166-get-started-with-custom-connectors-using-remote-mcp"},"claude_code":{"label":"Claude Code","inspect_argv":["claude","mcp","list"],"add_argv":["claude","mcp","add","--transport","http","athos","https://app.athos.fitness/mcp"],"instructions":"Run /mcp inside Claude Code, select Athos, and complete browser OAuth. The add command uses the default local scope; choose a wider scope only with user approval. Inspect the connection and tools in /mcp, then perform the authenticated reads below.","documentation":"https://code.claude.com/docs/en/mcp"},"hermes":{"label":"Hermes","inspect_argv":["hermes","mcp","list"],"add_argv":["hermes","mcp","add","athos","--url","https://app.athos.fitness/mcp","--auth","oauth"],"login_argv":["hermes","mcp","login","athos"],"verify_argv":["hermes","mcp","test","athos"],"instructions":"Use the intended Hermes profile. Adding the server may already open browser OAuth; run login in a fresh terminal if authorization is still needed. Complete Athos sign-in and consent. The test command checks initialization and tools/list, not authenticated athlete access. Refresh tools or start a new session, then perform the authenticated reads below. For a remote/headless host, follow Hermes's documented OAuth callback procedure; never paste callback URLs or tokens into chat.","documentation":"https://hermes-agent.nousresearch.com/docs/user-guide/features/mcp"},"instinct_muse":{"label":"Instinct (unverified client)","status":"unverified","instructions":"Custom MCP support is not verified for Instinct. This is separate from Meta's Muse Connector Platform below. Confirm the exact product and version first; Muse Code instructions do not establish support in a personal-agent app named Muse. If that product documents custom remote MCP with OAuth, add the MCP URL above in its supported connection settings and complete browser consent. It must support Streamable HTTP, OAuth discovery, dynamic client registration, and PKCE S256. Otherwise stop and share this guide; do not claim a connection or substitute a pasted API key. No client-specific install command is provided until official setup instructions are confirmed."},"muse":{"label":"Meta Muse Connector Platform","status":"requires_submission","instructions":"Muse integrations go through the Muse Connector Platform submission and approval process. Submit the MCP URL above with OAuth discovery, PKCE S256, requested scopes, tool documentation and a dedicated synthetic review account. Athos offers a Read Only consent choice for program/onboarding reads; full coaching requires separately approved write access. Muse's public guide does not specify every transport or OAuth-client requirement; confirm these in the portal. Approval and a successful Muse-side test are required before claiming Athos is available there. Do not invent an install command or request pasted passwords, API keys or tokens.","documentation":"https://platform.muse.ai/docs","submission_url":"https://platform.muse.ai/submission"},"chatgpt":{"instructions":"In ChatGPT, on a supported account or workspace, add a user-approved MCP connection using the server URL, complete Athos OAuth sign-in or sign-up in the browser, then select the connection in a new conversation. Account and workspace policies may not allow custom MCP connections; this page cannot enable them or install a plugin for you.","documentation":"https://developers.openai.com/plugins/deploy/connect-chatgpt"}},"boundaries":["Get user approval before changing client configuration. This page is setup documentation, not permission to install or connect.","Do not overwrite an existing connection. Inspect it first; reuse it if its URL matches, otherwise ask the user.","Never ask for the user's password or tokens in chat. Let the user sign in and consent in the Athos browser flow.","Use the client's secure OAuth credential storage. Do not place credentials in URLs, prompts, or project files.","Onboarding writes save interview progress and review corrections. Only explicit approval of the exact reviewed version may start program generation.","Workout and program writes require program:write consent and the athlete’s explicit request. Completed history and workout logging remain in the app; replacement requires explicit confirmation.","If your account or client does not support a user-approved MCP connection, give the user the setup link instead of claiming installation."],"tools":[{"name":"athos_get_connection","description":"Read the connected Athos athlete's delegated connection and program eligibility.","inputSchema":{"type":"object","properties":{},"additionalProperties":false},"annotations":{"readOnlyHint":true,"openWorldHint":false,"destructiveHint":false},"securitySchemes":[{"type":"oauth2","scopes":["program:read"]}]},{"name":"athos_get_program","description":"Read the connected athlete's canonical active Athos program.","inputSchema":{"type":"object","properties":{"view":{"type":"string","enum":["overview"]}},"additionalProperties":false},"annotations":{"readOnlyHint":true,"openWorldHint":false,"destructiveHint":false},"securitySchemes":[{"type":"oauth2","scopes":["program:read"]}]},{"name":"athos_get_onboarding","description":"Read the connected athlete's saved Athos onboarding progress, canonical question catalog, review, and generation status.","inputSchema":{"type":"object","properties":{},"additionalProperties":false},"securitySchemes":[{"type":"oauth2","scopes":["onboarding:read"]}],"_meta":{"securitySchemes":[{"type":"oauth2","scopes":["onboarding:read"]}]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"openWorldHint":false}},{"name":"athos_save_onboarding_turn","description":"Save one athlete answer during the Athos onboarding interview. ChatGPT conducts the interview; this does not create a program.","inputSchema":{"type":"object","properties":{"message":{"type":"string","minLength":1,"maxLength":4000},"asked_question_text":{"type":"string","minLength":1,"maxLength":4000},"answered_question_ids":{"type":"array","items":{"type":"string"},"maxItems":8},"expected_session_version":{"type":"integer","minimum":0},"expected_transcript_fingerprint":{"type":"string","minLength":64,"maxLength":64},"idempotency_key":{"type":"string","minLength":1,"maxLength":128}},"required":["message","expected_session_version","expected_transcript_fingerprint","idempotency_key"],"additionalProperties":false},"securitySchemes":[{"type":"oauth2","scopes":["onboarding:write"]}],"_meta":{"securitySchemes":[{"type":"oauth2","scopes":["onboarding:write"]}]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"openWorldHint":false}},{"name":"athos_prepare_onboarding_review","description":"Save the completed interview and queue Athos's existing canonical extraction for review. This never confirms or replaces a program.","inputSchema":{"type":"object","properties":{"expected_session_version":{"type":"integer","minimum":0},"expected_transcript_fingerprint":{"type":"string","minLength":64,"maxLength":64},"idempotency_key":{"type":"string","minLength":1,"maxLength":128}},"required":["expected_session_version","expected_transcript_fingerprint","idempotency_key"],"additionalProperties":false},"securitySchemes":[{"type":"oauth2","scopes":["onboarding:write"]}],"_meta":{"securitySchemes":[{"type":"oauth2","scopes":["onboarding:write"]}]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"openWorldHint":false}},{"name":"athos_correct_onboarding_review","description":"Apply an athlete-approved correction to the exact reviewed Athos onboarding revision.","inputSchema":{"type":"object","$defs":{},"properties":{"expected_revision_id":{"type":"string","format":"uuid"},"expected_version":{"type":"integer","minimum":1},"idempotency_key":{"type":"string","minLength":1,"maxLength":128},"patch":{"additionalProperties":false,"properties":{"profile":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"default":null,"title":"Profile"},"programming":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"default":null,"title":"Programming"},"nutrition":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"default":null,"title":"Nutrition"}},"title":"AthleteOnboardingContractSectionPatchV1","type":"object"}},"required":["expected_revision_id","expected_version","idempotency_key","patch"],"additionalProperties":false},"securitySchemes":[{"type":"oauth2","scopes":["onboarding:write"]}],"_meta":{"securitySchemes":[{"type":"oauth2","scopes":["onboarding:write"]}]},"annotations":{"readOnlyHint":false,"destructiveHint":true,"openWorldHint":false}},{"name":"athos_confirm_onboarding","description":"Confirm the exact review the athlete explicitly approved and start Athos's existing first-program generation flow.","inputSchema":{"type":"object","properties":{"reviewed_revision_id":{"type":"string","format":"uuid"},"reviewed_version":{"type":"integer","minimum":1},"approval":{"type":"boolean","const":true},"review_token":{"type":"string","minLength":1,"maxLength":2000},"idempotency_key":{"type":"string","minLength":1,"maxLength":128}},"required":["reviewed_revision_id","reviewed_version","approval","review_token","idempotency_key"],"additionalProperties":false},"securitySchemes":[{"type":"oauth2","scopes":["onboarding:write"]}],"_meta":{"securitySchemes":[{"type":"oauth2","scopes":["onboarding:write"]}]},"annotations":{"readOnlyHint":false,"destructiveHint":true,"openWorldHint":false}},{"name":"athos_retry_initial_generation","description":"Use only after the athlete asks to retry. Read the current failed generation first and pass its exact operation ID. This preserves the confirmed review and never replaces an active program.","inputSchema":{"type":"object","properties":{"expected_failed_operation_id":{"type":"string","format":"uuid"},"idempotency_key":{"type":"string","minLength":1,"maxLength":128}},"required":["expected_failed_operation_id","idempotency_key"],"additionalProperties":false},"securitySchemes":[{"type":"oauth2","scopes":["onboarding:write"]}],"_meta":{"securitySchemes":[{"type":"oauth2","scopes":["onboarding:write"]}]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"openWorldHint":false}},{"name":"athos_get_planning_questions","description":"Read the connected athlete's still-answerable coach planning questions and recorded assumptions.","inputSchema":{"type":"object","properties":{},"additionalProperties":false},"annotations":{"readOnlyHint":true,"openWorldHint":false,"destructiveHint":false},"securitySchemes":[{"type":"oauth2","scopes":["program:read"]}]},{"name":"athos_answer_planning_question","description":"Submit the athlete's stated answer to a specific Athos coach planning question. The Athos coach acknowledges it and decides whether future training needs adjustment. A queued answer is not a completed plan change.","inputSchema":{"additionalProperties":false,"properties":{"expected_version":{"minimum":1,"title":"Expected Version","type":"integer"},"answer":{"maxLength":800,"minLength":1,"title":"Answer","type":"string"},"idempotency_key":{"maxLength":128,"minLength":1,"title":"Idempotency Key","type":"string"},"question_id":{"format":"uuid","title":"Question Id","type":"string"}},"required":["expected_version","answer","idempotency_key","question_id"],"title":"McpPlanningQuestionAnswerRequest","type":"object"},"annotations":{"readOnlyHint":false,"openWorldHint":false,"destructiveHint":true,"idempotentHint":true},"securitySchemes":[{"type":"oauth2","scopes":["coaching:write"]}]},{"name":"athos_modify_workout","description":"Adapt one workout on the remaining days of the current training week, or move it to a later day within that week, using the athlete's explicit instruction and supplied context (time, equipment, travel). Use after reading the actual program and target day. Existing Athos authorities protect completed history. Returns queued work, not a saved edit; follow athos_get_change_status.","inputSchema":{"$defs":{"ProgramCommandContextV1":{"additionalProperties":false,"description":"Bounded request-only context supplied by an athlete or delegated agent.","properties":{"context_kind":{"enum":["readiness","schedule","travel","equipment","preference","other"],"title":"Context Kind","type":"string"},"statement":{"maxLength":2048,"minLength":1,"title":"Statement","type":"string"},"effective_start_date":{"anyOf":[{"format":"date","type":"string"},{"type":"null"}],"default":null,"title":"Effective Start Date"},"effective_end_date":{"anyOf":[{"format":"date","type":"string"},{"type":"null"}],"default":null,"title":"Effective End Date"},"persistence":{"const":"operation_only","default":"operation_only","title":"Persistence","type":"string"}},"required":["context_kind","statement"],"title":"ProgramCommandContextV1","type":"object"}},"additionalProperties":false,"properties":{"expected_program_id":{"format":"uuid","title":"Expected Program Id","type":"string"},"expected_revision_id":{"format":"uuid","title":"Expected Revision Id","type":"string"},"expected_event_cursor":{"minimum":0,"title":"Expected Event Cursor","type":"integer"},"idempotency_key":{"maxLength":256,"minLength":1,"title":"Idempotency Key","type":"string"},"instruction":{"maxLength":4000,"minLength":1,"title":"Instruction","type":"string"},"context":{"anyOf":[{"$ref":"#/$defs/ProgramCommandContextV1"},{"type":"null"}],"default":null,"description":"Context applies only to this operation; it does not save durable preferences."},"target_day_id":{"format":"uuid","title":"Target Day Id","type":"string"}},"required":["expected_program_id","expected_revision_id","expected_event_cursor","idempotency_key","instruction","target_day_id"],"title":"ModifyWorkout","type":"object"},"outputSchema":{"type":"object","properties":{"applied":{"type":"boolean"}},"required":["applied"],"additionalProperties":true},"annotations":{"readOnlyHint":false,"destructiveHint":true,"openWorldHint":false,"idempotentHint":true},"securitySchemes":[{"type":"oauth2","scopes":["program:write"]}]},{"name":"athos_replan_week","description":"Rearrange the remaining Athos training week when the athlete asks to change their schedule or constraints. Use fresh program/revision/cursor and include their stated context. Returns queued work; follow athos_get_change_status and required questions.","inputSchema":{"$defs":{"ProgramCommandContextV1":{"additionalProperties":false,"description":"Bounded request-only context supplied by an athlete or delegated agent.","properties":{"context_kind":{"enum":["readiness","schedule","travel","equipment","preference","other"],"title":"Context Kind","type":"string"},"statement":{"maxLength":2048,"minLength":1,"title":"Statement","type":"string"},"effective_start_date":{"anyOf":[{"format":"date","type":"string"},{"type":"null"}],"default":null,"title":"Effective Start Date"},"effective_end_date":{"anyOf":[{"format":"date","type":"string"},{"type":"null"}],"default":null,"title":"Effective End Date"},"persistence":{"const":"operation_only","default":"operation_only","title":"Persistence","type":"string"}},"required":["context_kind","statement"],"title":"ProgramCommandContextV1","type":"object"}},"additionalProperties":false,"properties":{"expected_program_id":{"format":"uuid","title":"Expected Program Id","type":"string"},"expected_revision_id":{"format":"uuid","title":"Expected Revision Id","type":"string"},"expected_event_cursor":{"minimum":0,"title":"Expected Event Cursor","type":"integer"},"idempotency_key":{"maxLength":256,"minLength":1,"title":"Idempotency Key","type":"string"},"instruction":{"maxLength":4000,"minLength":1,"title":"Instruction","type":"string"},"context":{"anyOf":[{"$ref":"#/$defs/ProgramCommandContextV1"},{"type":"null"}],"default":null,"description":"Context applies only to this operation; it does not save durable preferences."}},"required":["expected_program_id","expected_revision_id","expected_event_cursor","idempotency_key","instruction"],"title":"ProgramCommand","type":"object"},"outputSchema":{"type":"object","properties":{"applied":{"type":"boolean"}},"required":["applied"],"additionalProperties":true},"annotations":{"readOnlyHint":false,"destructiveHint":true,"openWorldHint":false,"idempotentHint":true},"securitySchemes":[{"type":"oauth2","scopes":["program:write"]}]},{"name":"athos_update_program","description":"Update the remaining Athos program for the athlete's changed goals, availability or equipment while preserving completed history. Include their stated context. Returns queued work; inspect status and fresh program before claiming the change saved.","inputSchema":{"$defs":{"ProgramCommandContextV1":{"additionalProperties":false,"description":"Bounded request-only context supplied by an athlete or delegated agent.","properties":{"context_kind":{"enum":["readiness","schedule","travel","equipment","preference","other"],"title":"Context Kind","type":"string"},"statement":{"maxLength":2048,"minLength":1,"title":"Statement","type":"string"},"effective_start_date":{"anyOf":[{"format":"date","type":"string"},{"type":"null"}],"default":null,"title":"Effective Start Date"},"effective_end_date":{"anyOf":[{"format":"date","type":"string"},{"type":"null"}],"default":null,"title":"Effective End Date"},"persistence":{"const":"operation_only","default":"operation_only","title":"Persistence","type":"string"}},"required":["context_kind","statement"],"title":"ProgramCommandContextV1","type":"object"}},"additionalProperties":false,"properties":{"expected_program_id":{"format":"uuid","title":"Expected Program Id","type":"string"},"expected_revision_id":{"format":"uuid","title":"Expected Revision Id","type":"string"},"expected_event_cursor":{"minimum":0,"title":"Expected Event Cursor","type":"integer"},"idempotency_key":{"maxLength":256,"minLength":1,"title":"Idempotency Key","type":"string"},"instruction":{"maxLength":4000,"minLength":1,"title":"Instruction","type":"string"},"context":{"anyOf":[{"$ref":"#/$defs/ProgramCommandContextV1"},{"type":"null"}],"default":null,"description":"Context applies only to this operation; it does not save durable preferences."}},"required":["expected_program_id","expected_revision_id","expected_event_cursor","idempotency_key","instruction"],"title":"ProgramCommand","type":"object"},"outputSchema":{"type":"object","properties":{"applied":{"type":"boolean"}},"required":["applied"],"additionalProperties":true},"annotations":{"readOnlyHint":false,"destructiveHint":true,"openWorldHint":false,"idempotentHint":true},"securitySchemes":[{"type":"oauth2","scopes":["program:write"]}]},{"name":"athos_replace_program","description":"Replace an active Athos program only after the athlete explicitly confirms that replacement. Use fresh program/revision/cursor and confirmed_by_user=true. Never use onboarding to replace an existing program. Returns queued work; follow status to publication.","inputSchema":{"$defs":{"ProgramCommandContextV1":{"additionalProperties":false,"description":"Bounded request-only context supplied by an athlete or delegated agent.","properties":{"context_kind":{"enum":["readiness","schedule","travel","equipment","preference","other"],"title":"Context Kind","type":"string"},"statement":{"maxLength":2048,"minLength":1,"title":"Statement","type":"string"},"effective_start_date":{"anyOf":[{"format":"date","type":"string"},{"type":"null"}],"default":null,"title":"Effective Start Date"},"effective_end_date":{"anyOf":[{"format":"date","type":"string"},{"type":"null"}],"default":null,"title":"Effective End Date"},"persistence":{"const":"operation_only","default":"operation_only","title":"Persistence","type":"string"}},"required":["context_kind","statement"],"title":"ProgramCommandContextV1","type":"object"}},"additionalProperties":false,"properties":{"expected_program_id":{"format":"uuid","title":"Expected Program Id","type":"string"},"expected_revision_id":{"format":"uuid","title":"Expected Revision Id","type":"string"},"expected_event_cursor":{"minimum":0,"title":"Expected Event Cursor","type":"integer"},"idempotency_key":{"maxLength":256,"minLength":1,"title":"Idempotency Key","type":"string"},"instruction":{"maxLength":4000,"minLength":1,"title":"Instruction","type":"string"},"context":{"anyOf":[{"$ref":"#/$defs/ProgramCommandContextV1"},{"type":"null"}],"default":null,"description":"Context applies only to this operation; it does not save durable preferences."},"confirmed_by_user":{"const":true,"title":"Confirmed By User","type":"boolean"}},"required":["expected_program_id","expected_revision_id","expected_event_cursor","idempotency_key","instruction","confirmed_by_user"],"title":"ReplaceProgram","type":"object"},"outputSchema":{"type":"object","properties":{"applied":{"type":"boolean"}},"required":["applied"],"additionalProperties":true},"annotations":{"readOnlyHint":false,"destructiveHint":true,"openWorldHint":false,"idempotentHint":true},"securitySchemes":[{"type":"oauth2","scopes":["program:write"]}]},{"name":"athos_plan_next_week","description":"Ensure the exact next athlete-local Monday–Sunday is planned from the saved Athos program. Read the program first and supply its current program/revision/event cursor. This does not reinterpret instructions or save context. An already materialized week returns its canonical readback without queuing another week; changed=false and applied=false mean no new change was applied. New planning returns an owned weekly-fill operation; follow athos_get_change_status until publication. Reuse identical arguments and key after a timeout, including across midnight.","inputSchema":{"additionalProperties":false,"properties":{"expected_program_id":{"format":"uuid","title":"Expected Program Id","type":"string"},"expected_revision_id":{"format":"uuid","title":"Expected Revision Id","type":"string"},"expected_event_cursor":{"minimum":0,"title":"Expected Event Cursor","type":"integer"},"idempotency_key":{"maxLength":256,"minLength":1,"title":"Idempotency Key","type":"string"}},"required":["expected_program_id","expected_revision_id","expected_event_cursor","idempotency_key"],"title":"NextWeekCommandV1","type":"object"},"outputSchema":{"type":"object","properties":{"applied":{"type":"boolean"}},"required":["applied"],"additionalProperties":true},"annotations":{"readOnlyHint":false,"destructiveHint":true,"openWorldHint":false,"idempotentHint":true},"securitySchemes":[{"type":"oauth2","scopes":["program:write"]}]},{"name":"athos_get_change_status","description":"Read one requested Athos change by interaction_id or the operation_id returned by a direct workout edit. Includes any question awaiting the athlete and the linked operation. A decided interaction alone does not mean saved. Published operations include fresh canonical program readback; pending or failed work is not a completed change.","inputSchema":{"additionalProperties":false,"properties":{"interaction_id":{"anyOf":[{"format":"uuid","type":"string"},{"type":"null"}],"default":null,"title":"Interaction Id"},"operation_id":{"anyOf":[{"format":"uuid","type":"string"},{"type":"null"}],"default":null,"title":"Operation Id"}},"title":"ReadChangeStatus","type":"object"},"outputSchema":{"type":"object","properties":{"applied":{"type":"boolean"}},"required":["applied"],"additionalProperties":true},"annotations":{"readOnlyHint":true,"destructiveHint":false,"openWorldHint":false},"securitySchemes":[{"type":"oauth2","scopes":["program:read"]}]},{"name":"athos_answer_change_question","description":"Answer the actual clarification question returned by athos_get_change_status using the athlete's stated response and current question/version IDs. Supply exactly one selected option or free-text answer. Continue following status; queued is not applied.","inputSchema":{"additionalProperties":false,"properties":{"interaction_id":{"format":"uuid","title":"Interaction Id","type":"string"},"idempotency_key":{"maxLength":256,"minLength":1,"title":"Idempotency Key","type":"string"},"expected_interaction_version":{"minimum":1,"title":"Expected Interaction Version","type":"integer"},"question_id":{"format":"uuid","title":"Question Id","type":"string"},"selected_option_id":{"anyOf":[{"maxLength":128,"minLength":1,"type":"string"},{"type":"null"}],"default":null,"title":"Selected Option Id"},"free_text_answer":{"anyOf":[{"maxLength":4000,"minLength":1,"type":"string"},{"type":"null"}],"default":null,"title":"Free Text Answer"}},"required":["interaction_id","idempotency_key","expected_interaction_version","question_id"],"title":"AnswerQuestion","type":"object"},"outputSchema":{"type":"object","properties":{"applied":{"type":"boolean"}},"required":["applied"],"additionalProperties":true},"annotations":{"readOnlyHint":false,"destructiveHint":true,"openWorldHint":false,"idempotentHint":true},"securitySchemes":[{"type":"oauth2","scopes":["program:write"]}]},{"name":"athos_answer_operation_question","description":"Answer a programming operation's actual question with the athlete's stated response and current operation version/question IDs. Supply exactly one selected option or free-text answer; then inspect the linked change status again.","inputSchema":{"additionalProperties":false,"properties":{"operation_id":{"format":"uuid","title":"Operation Id","type":"string"},"idempotency_key":{"maxLength":256,"minLength":1,"title":"Idempotency Key","type":"string"},"expected_operation_version":{"minimum":1,"title":"Expected Operation Version","type":"integer"},"question_id":{"format":"uuid","title":"Question Id","type":"string"},"selected_option_id":{"anyOf":[{"maxLength":128,"minLength":1,"type":"string"},{"type":"null"}],"default":null,"title":"Selected Option Id"},"free_text_answer":{"anyOf":[{"maxLength":4000,"minLength":1,"type":"string"},{"type":"null"}],"default":null,"title":"Free Text Answer"}},"required":["operation_id","idempotency_key","expected_operation_version","question_id"],"title":"AnswerOperation","type":"object"},"outputSchema":{"type":"object","properties":{"applied":{"type":"boolean"}},"required":["applied"],"additionalProperties":true},"annotations":{"readOnlyHint":false,"destructiveHint":true,"openWorldHint":false,"idempotentHint":true},"securitySchemes":[{"type":"oauth2","scopes":["program:write"]}]},{"name":"athos_get_workout","description":"Read the actual planned Athos workout with stable exercise/set IDs, dose and exact revision/content fences needed for an edit. Omit day_id for athlete-local today; otherwise use a day returned by athos_get_program. Supply execution_id instead of day_id to read an in-progress workout: execution_version, editable remaining IDs, completed work and protected running blocks.","inputSchema":{"additionalProperties":false,"properties":{"day_id":{"anyOf":[{"format":"uuid","type":"string"},{"type":"null"}],"default":null,"title":"Day Id"},"execution_id":{"anyOf":[{"format":"uuid","type":"string"},{"type":"null"}],"default":null,"title":"Execution Id"}},"title":"ReadWorkout","type":"object"},"outputSchema":{"type":"object","additionalProperties":true},"annotations":{"readOnlyHint":true,"destructiveHint":false,"openWorldHint":false,"idempotentHint":true},"securitySchemes":[{"type":"oauth2","scopes":["program:read"]}]},{"name":"athos_search_exercises","description":"Find eligible exercises in the planned day's or live execution's pinned catalog, filtered by the athlete's equipment and canonical restrictions. Supply a movement pattern, modality, block type or name. Pass an environment override only when the athlete stated different equipment/venue, and use the same override for the edit. Never invent exercise IDs.","inputSchema":{"$defs":{"EnvironmentOverrideV1":{"additionalProperties":false,"description":"What the athlete has today, per the conversation. Replaces the default\nenvironment for this edit only; the coach supplies it when the athlete said so.","properties":{"environment_key":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Environment Key"},"available_equipment":{"items":{"type":"string"},"title":"Available Equipment","type":"array"}},"required":["available_equipment"],"title":"EnvironmentOverrideV1","type":"object"}},"additionalProperties":false,"properties":{"day_id":{"anyOf":[{"format":"uuid","type":"string"},{"type":"null"}],"default":null,"title":"Day Id"},"execution_id":{"anyOf":[{"format":"uuid","type":"string"},{"type":"null"}],"default":null,"title":"Execution Id"},"movement_patterns":{"anyOf":[{"items":{"enum":["squat","hinge","lunge","single_leg","horizontal_press","vertical_press","horizontal_pull","vertical_pull","carry","trunk_bracing","rotation","monostructural","mobility"],"type":"string"},"maxItems":4,"type":"array"},{"type":"null"}],"default":null,"title":"Movement Patterns"},"modality":{"anyOf":[{"enum":["strength","hypertrophy","conditioning","mobility"],"type":"string"},{"type":"null"}],"default":null,"title":"Modality"},"block_type":{"anyOf":[{"enum":["prep","main","superset","circuit","interval","amrap","emom","for_time","cooldown"],"type":"string"},{"type":"null"}],"default":null,"title":"Block Type"},"text":{"anyOf":[{"maxLength":80,"minLength":1,"type":"string"},{"type":"null"}],"default":null,"title":"Text"},"limit":{"default":6,"maximum":8,"minimum":1,"title":"Limit","type":"integer"},"environment_override":{"anyOf":[{"$ref":"#/$defs/EnvironmentOverrideV1"},{"type":"null"}],"default":null}},"title":"SearchExercises","type":"object"},"outputSchema":{"type":"object","additionalProperties":true},"annotations":{"readOnlyHint":true,"destructiveHint":false,"openWorldHint":false,"idempotentHint":true},"securitySchemes":[{"type":"oauth2","scopes":["program:read"]}]},{"name":"athos_edit_workout","description":"Save the athlete's explicit exercise, set, rep, load, rest or block changes atomically to a planned workout or the unfinished remainder of an active execution. For planned edits, read athos_get_workout and use its exact program/revision/cursor/day/content/session IDs. Use catalog candidates for new exercises and a stable idempotency key for retries. Set op_list.reason to the athlete's request; use time_limit only for their stated time limit. All ops succeed together or none are saved. For active edits use execution_id and expected_execution_version from athos_get_workout, without planned-workout fences. Completed work and running timed blocks are protected; this does not log workouts.","inputSchema":{"$defs":{"AbsoluteLoadV1":{"additionalProperties":false,"properties":{"load_type":{"const":"absolute","title":"Load Type","type":"string"},"value":{"minimum":0,"title":"Value","type":"number"},"unit":{"enum":["kg","lb"],"title":"Unit","type":"string"}},"required":["load_type","value","unit"],"title":"AbsoluteLoadV1","type":"object"},"AddBlockOpV1":{"additionalProperties":false,"description":"Create a whole block in one call: finisher, superset, circuit, mobility.\n\nSet-based blocks use ``exercises[].sets``; superset/circuit use ``rounds``\n(every exercise gets one set per round); timed blocks use the timing fields\nand each exercise's ``dose`` as its per-round movement prescription.","properties":{"op":{"const":"add_block","title":"Op","type":"string"},"position":{"$ref":"#/$defs/BlockPositionV1"},"block_type":{"anyOf":[{"enum":["prep","main","cooldown"],"type":"string"},{"enum":["superset","circuit"],"type":"string"},{"enum":["interval","amrap","emom","for_time"],"type":"string"}],"title":"Block Type"},"title":{"anyOf":[{"maxLength":2048,"minLength":1,"type":"string"},{"type":"null"}],"default":null,"title":"Title"},"exercises":{"items":{"$ref":"#/$defs/NewExerciseV1"},"maxItems":8,"minItems":1,"title":"Exercises","type":"array"},"rounds":{"anyOf":[{"maximum":30,"minimum":1,"type":"integer"},{"type":"null"}],"default":null,"title":"Rounds"},"rest_between_exercises_seconds":{"anyOf":[{"maximum":600,"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"title":"Rest Between Exercises Seconds"},"rest_between_rounds_seconds":{"anyOf":[{"maximum":900,"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"title":"Rest Between Rounds Seconds"},"work_seconds":{"anyOf":[{"exclusiveMinimum":0,"maximum":3600,"type":"integer"},{"type":"null"}],"default":null,"title":"Work Seconds"},"rest_seconds":{"anyOf":[{"maximum":900,"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"title":"Rest Seconds"},"time_cap_seconds":{"anyOf":[{"exclusiveMinimum":0,"maximum":7200,"type":"integer"},{"type":"null"}],"default":null,"title":"Time Cap Seconds"},"interval_seconds":{"anyOf":[{"exclusiveMinimum":0,"maximum":600,"type":"integer"},{"type":"null"}],"default":null,"title":"Interval Seconds"}},"required":["op","position","block_type","exercises"],"title":"AddBlockOpV1","type":"object"},"AddExerciseOpV1":{"additionalProperties":false,"description":"Add one exercise to an existing prep/main/cooldown block, or as a new main block.","properties":{"op":{"const":"add_exercise","title":"Op","type":"string"},"exercise":{"$ref":"#/$defs/NewExerciseV1"},"block_id":{"anyOf":[{"format":"uuid","type":"string"},{"type":"null"}],"default":null,"title":"Block Id"},"position":{"anyOf":[{"$ref":"#/$defs/BlockPositionV1"},{"type":"null"}],"default":null}},"required":["op","exercise"],"title":"AddExerciseOpV1","type":"object"},"AddSetsOpV1":{"additionalProperties":false,"description":"Append sets with new IDs. Unspecified dose fields copy the last set.","properties":{"op":{"const":"add_sets","title":"Op","type":"string"},"prescription_id":{"format":"uuid","title":"Prescription Id","type":"string"},"count":{"maximum":10,"minimum":1,"title":"Count","type":"integer"},"dose":{"anyOf":[{"$ref":"#/$defs/SetDoseV1"},{"type":"null"}],"default":null}},"required":["op","prescription_id","count"],"title":"AddSetsOpV1","type":"object"},"AthleteTimeLimitV1":{"additionalProperties":false,"description":"A limit the athlete stated for THIS workout (\"I only have 30 minutes\").\n\nA hard \"at most\" rule, checked after every op is applied, with a tolerance\nfor estimate noise of the greater of 3 minutes or 5% of the limit. It never\nasks for work to fill the time. The athlete's usual availability is not\nthis; it stays the ``duration_over_availability`` warning.\n\n* ``added_work``: estimated minutes the edit adds (after - before).\n* ``total_workout``: the whole workout after the edit. In a live workout\n  that is the time already spent plus the remainder after the edit.\n* ``remaining_workout``: what is left after the edit (a planned workout:\n  the whole workout).","properties":{"scope":{"description":"added_work = extra minutes this edit may add; total_workout = the whole workout; remaining_workout = what is left of the workout in progress.","enum":["added_work","total_workout","remaining_workout"],"title":"Scope","type":"string"},"minutes":{"description":"Whole minutes, 1-240.","maximum":240,"minimum":1,"title":"Minutes","type":"integer"}},"required":["scope","minutes"],"title":"AthleteTimeLimitV1","type":"object"},"BlockPositionV1":{"additionalProperties":false,"description":"Where new or moved work goes, relative to the current block order.","properties":{"anchor":{"enum":["start","end","before_cooldown","after_block"],"title":"Anchor","type":"string"},"block_id":{"anyOf":[{"format":"uuid","type":"string"},{"type":"null"}],"default":null,"title":"Block Id"}},"required":["anchor"],"title":"BlockPositionV1","type":"object"},"BodyweightLoadV1":{"additionalProperties":false,"properties":{"load_type":{"const":"bodyweight","title":"Load Type","type":"string"},"direction":{"enum":["none","added","assisted"],"title":"Direction","type":"string"},"magnitude":{"minimum":0,"title":"Magnitude","type":"number"},"unit":{"anyOf":[{"enum":["kg","lb"],"type":"string"},{"type":"null"}],"default":null,"title":"Unit"}},"required":["load_type","direction","magnitude"],"title":"BodyweightLoadV1","type":"object"},"CaloriesTargetV1":{"additionalProperties":false,"properties":{"quantity_type":{"const":"calories","title":"Quantity Type","type":"string"},"calories":{"exclusiveMinimum":0,"title":"Calories","type":"integer"}},"required":["quantity_type","calories"],"title":"CaloriesTargetV1","type":"object"},"CompletionTargetV1":{"additionalProperties":false,"properties":{"quantity_type":{"const":"completion","title":"Quantity Type","type":"string"},"required":{"const":true,"default":true,"title":"Required","type":"boolean"}},"required":["quantity_type"],"title":"CompletionTargetV1","type":"object"},"DistanceTargetV1":{"additionalProperties":false,"properties":{"quantity_type":{"const":"distance","title":"Quantity Type","type":"string"},"value":{"exclusiveMinimum":0,"title":"Value","type":"number"},"unit":{"enum":["m","km","yd","mi"],"title":"Unit","type":"string"}},"required":["quantity_type","value","unit"],"title":"DistanceTargetV1","type":"object"},"DurationTargetV1":{"additionalProperties":false,"properties":{"quantity_type":{"const":"duration","title":"Quantity Type","type":"string"},"minimum_seconds":{"exclusiveMinimum":0,"title":"Minimum Seconds","type":"integer"},"maximum_seconds":{"exclusiveMinimum":0,"title":"Maximum Seconds","type":"integer"}},"required":["quantity_type","minimum_seconds","maximum_seconds"],"title":"DurationTargetV1","type":"object"},"EditLiveWorkout":{"additionalProperties":false,"properties":{"execution_id":{"format":"uuid","title":"Execution Id","type":"string"},"expected_execution_version":{"minimum":1,"title":"Expected Execution Version","type":"integer"},"op_list":{"$ref":"#/$defs/WorkoutOpListV1"},"environment_override":{"anyOf":[{"$ref":"#/$defs/EnvironmentOverrideV1"},{"type":"null"}],"default":null},"idempotency_key":{"maxLength":246,"minLength":1,"title":"Idempotency Key","type":"string"}},"required":["execution_id","expected_execution_version","op_list","idempotency_key"],"title":"EditLiveWorkout","type":"object"},"EditWorkout":{"additionalProperties":false,"properties":{"program_id":{"format":"uuid","title":"Program Id","type":"string"},"expected_revision_id":{"format":"uuid","title":"Expected Revision Id","type":"string"},"expected_event_cursor":{"minimum":0,"title":"Expected Event Cursor","type":"integer"},"day_id":{"format":"uuid","title":"Day Id","type":"string"},"expected_day_content_revision_id":{"format":"uuid","title":"Expected Day Content Revision Id","type":"string"},"expected_content_hash":{"pattern":"^[0-9a-f]{64}$","title":"Expected Content Hash","type":"string"},"session_id":{"format":"uuid","title":"Session Id","type":"string"},"op_list":{"$ref":"#/$defs/WorkoutOpListV1"},"environment_override":{"anyOf":[{"$ref":"#/$defs/EnvironmentOverrideV1"},{"type":"null"}],"default":null},"idempotency_key":{"maxLength":256,"minLength":1,"title":"Idempotency Key","type":"string"}},"required":["program_id","expected_revision_id","expected_event_cursor","day_id","expected_day_content_revision_id","expected_content_hash","session_id","op_list","idempotency_key"],"title":"EditWorkout","type":"object"},"EnvironmentOverrideV1":{"additionalProperties":false,"description":"What the athlete has today, per the conversation. Replaces the default\nenvironment for this edit only; the coach supplies it when the athlete said so.","properties":{"environment_key":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Environment Key"},"available_equipment":{"items":{"type":"string"},"title":"Available Equipment","type":"array"}},"required":["available_equipment"],"title":"EnvironmentOverrideV1","type":"object"},"MoveBlockOpV1":{"additionalProperties":false,"properties":{"op":{"const":"move_block","title":"Op","type":"string"},"block_id":{"format":"uuid","title":"Block Id","type":"string"},"position":{"$ref":"#/$defs/BlockPositionV1"}},"required":["op","block_id","position"],"title":"MoveBlockOpV1","type":"object"},"NewExerciseV1":{"additionalProperties":false,"description":"One exercise inside ``add_exercise`` / ``add_block``.","properties":{"exercise_id":{"exclusiveMinimum":0,"title":"Exercise Id","type":"integer"},"sets":{"anyOf":[{"maximum":10,"minimum":1,"type":"integer"},{"type":"null"}],"default":null,"title":"Sets"},"dose":{"$ref":"#/$defs/SetDoseV1"},"intent":{"anyOf":[{"maxLength":2048,"minLength":1,"type":"string"},{"type":"null"}],"default":null,"title":"Intent"}},"required":["exercise_id","dose"],"title":"NewExerciseV1","type":"object"},"PercentOneRepMaxLoadV1":{"additionalProperties":false,"properties":{"load_type":{"const":"percent_1rm","title":"Load Type","type":"string"},"percent":{"exclusiveMinimum":0,"maximum":100,"title":"Percent","type":"number"}},"required":["load_type","percent"],"title":"PercentOneRepMaxLoadV1","type":"object"},"RemoveBlockOpV1":{"additionalProperties":false,"properties":{"op":{"const":"remove_block","title":"Op","type":"string"},"block_id":{"format":"uuid","title":"Block Id","type":"string"}},"required":["op","block_id"],"title":"RemoveBlockOpV1","type":"object"},"RemoveExerciseOpV1":{"additionalProperties":false,"description":"Remove one exercise's unfinished work. An emptied block is removed; a\nsuperset/circuit left with one exercise becomes a straight main block\n(reported as a warning).","properties":{"op":{"const":"remove_exercise","title":"Op","type":"string"},"prescription_id":{"format":"uuid","title":"Prescription Id","type":"string"}},"required":["op","prescription_id"],"title":"RemoveExerciseOpV1","type":"object"},"RemoveSetsOpV1":{"additionalProperties":false,"description":"Drop unfinished sets; surviving sets keep their IDs and dose exactly.\n\n``count`` removes that many from the end (highest ``set_index`` first).\nRemoving every set of a prescription is ``remove_exercise``, not this op.","properties":{"op":{"const":"remove_sets","title":"Op","type":"string"},"prescription_id":{"format":"uuid","title":"Prescription Id","type":"string"},"count":{"anyOf":[{"maximum":10,"minimum":1,"type":"integer"},{"type":"null"}],"default":null,"title":"Count"},"set_ids":{"anyOf":[{"items":{"format":"uuid","type":"string"},"maxItems":10,"minItems":1,"type":"array"},{"type":"null"}],"default":null,"title":"Set Ids"}},"required":["op","prescription_id"],"title":"RemoveSetsOpV1","type":"object"},"RepetitionTargetV1":{"additionalProperties":false,"properties":{"quantity_type":{"const":"reps","title":"Quantity Type","type":"string"},"minimum":{"minimum":1,"title":"Minimum","type":"integer"},"maximum":{"minimum":1,"title":"Maximum","type":"integer"},"per_side":{"title":"Per Side","type":"boolean"}},"required":["quantity_type","minimum","maximum","per_side"],"title":"RepetitionTargetV1","type":"object"},"RirTargetV1":{"additionalProperties":false,"properties":{"effort_type":{"const":"rir","title":"Effort Type","type":"string"},"minimum":{"minimum":0,"title":"Minimum","type":"number"},"maximum":{"minimum":0,"title":"Maximum","type":"number"}},"required":["effort_type","minimum","maximum"],"title":"RirTargetV1","type":"object"},"RpeTargetV1":{"additionalProperties":false,"properties":{"effort_type":{"const":"rpe","title":"Effort Type","type":"string"},"minimum":{"maximum":10,"minimum":0,"title":"Minimum","type":"number"},"maximum":{"maximum":10,"minimum":0,"title":"Maximum","type":"number"}},"required":["effort_type","minimum","maximum"],"title":"RpeTargetV1","type":"object"},"SetDoseV1":{"additionalProperties":false,"description":"Patch only requested dose fields; null preserves and never clears.\n\nRest-only edits set rest_seconds and leave target, load, effort and tempo\nnull. Do not copy or infer untouched parts of the prescription.","properties":{"target":{"anyOf":[{"discriminator":{"mapping":{"calories":"#/$defs/CaloriesTargetV1","completion":"#/$defs/CompletionTargetV1","distance":"#/$defs/DistanceTargetV1","duration":"#/$defs/DurationTargetV1","reps":"#/$defs/RepetitionTargetV1"},"propertyName":"quantity_type"},"oneOf":[{"$ref":"#/$defs/RepetitionTargetV1"},{"$ref":"#/$defs/DurationTargetV1"},{"$ref":"#/$defs/DistanceTargetV1"},{"$ref":"#/$defs/CaloriesTargetV1"},{"$ref":"#/$defs/CompletionTargetV1"}]},{"type":"null"}],"default":null,"description":"Null to preserve the existing target, including per_side. Set only for an explicitly requested rep/time/distance change.","title":"Target"},"load":{"anyOf":[{"discriminator":{"mapping":{"absolute":"#/$defs/AbsoluteLoadV1","bodyweight":"#/$defs/BodyweightLoadV1","percent_1rm":"#/$defs/PercentOneRepMaxLoadV1"},"propertyName":"load_type"},"oneOf":[{"$ref":"#/$defs/AbsoluteLoadV1"},{"$ref":"#/$defs/PercentOneRepMaxLoadV1"},{"$ref":"#/$defs/BodyweightLoadV1"}]},{"type":"null"}],"default":null,"title":"Load"},"effort":{"anyOf":[{"discriminator":{"mapping":{"rir":"#/$defs/RirTargetV1","rpe":"#/$defs/RpeTargetV1"},"propertyName":"effort_type"},"oneOf":[{"$ref":"#/$defs/RpeTargetV1"},{"$ref":"#/$defs/RirTargetV1"}]},{"type":"null"}],"default":null,"title":"Effort"},"tempo":{"anyOf":[{"maxLength":2048,"minLength":1,"type":"string"},{"type":"null"}],"default":null,"title":"Tempo"},"rest_seconds":{"anyOf":[{"maximum":900,"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"title":"Rest Seconds"}},"title":"SetDoseV1","type":"object"},"SetFieldsOpV1":{"additionalProperties":false,"description":"Change only the named fields on the addressed sets (default: all unfinished).","properties":{"op":{"const":"set_fields","title":"Op","type":"string"},"prescription_id":{"format":"uuid","title":"Prescription Id","type":"string"},"set_ids":{"anyOf":[{"items":{"format":"uuid","type":"string"},"maxItems":10,"minItems":1,"type":"array"},{"type":"null"}],"default":null,"title":"Set Ids"},"set":{"$ref":"#/$defs/SetDoseV1"},"clear":{"items":{"enum":["load","effort","tempo","rest_seconds"],"type":"string"},"maxItems":4,"title":"Clear","type":"array"}},"required":["op","prescription_id"],"title":"SetFieldsOpV1","type":"object"},"SwapExerciseOpV1":{"additionalProperties":false,"description":"Replace the exercise; sets, reps, rest, tempo and effort carry over.\n\nLoad carries over only when the new exercise uses the same equipment;\notherwise it is reset and a warning is returned. ``dose`` overrides named\nfields on every unfinished set.","properties":{"op":{"const":"swap","title":"Op","type":"string"},"prescription_id":{"format":"uuid","title":"Prescription Id","type":"string"},"exercise_id":{"exclusiveMinimum":0,"title":"Exercise Id","type":"integer"},"dose":{"anyOf":[{"$ref":"#/$defs/SetDoseV1"},{"type":"null"}],"default":null}},"required":["op","prescription_id","exercise_id"],"title":"SwapExerciseOpV1","type":"object"},"WorkoutOpListV1":{"additionalProperties":false,"description":"Applied atomically: every op succeeds or nothing changes.","properties":{"schema_version":{"const":"workout_op_list.v1","default":"workout_op_list.v1","title":"Schema Version","type":"string"},"ops":{"items":{"discriminator":{"mapping":{"add_block":"#/$defs/AddBlockOpV1","add_exercise":"#/$defs/AddExerciseOpV1","add_sets":"#/$defs/AddSetsOpV1","move_block":"#/$defs/MoveBlockOpV1","remove_block":"#/$defs/RemoveBlockOpV1","remove_exercise":"#/$defs/RemoveExerciseOpV1","remove_sets":"#/$defs/RemoveSetsOpV1","set_fields":"#/$defs/SetFieldsOpV1","swap":"#/$defs/SwapExerciseOpV1"},"propertyName":"op"},"oneOf":[{"$ref":"#/$defs/RemoveSetsOpV1"},{"$ref":"#/$defs/AddSetsOpV1"},{"$ref":"#/$defs/SetFieldsOpV1"},{"$ref":"#/$defs/SwapExerciseOpV1"},{"$ref":"#/$defs/AddExerciseOpV1"},{"$ref":"#/$defs/AddBlockOpV1"},{"$ref":"#/$defs/RemoveExerciseOpV1"},{"$ref":"#/$defs/RemoveBlockOpV1"},{"$ref":"#/$defs/MoveBlockOpV1"}]},"maxItems":12,"minItems":1,"title":"Ops","type":"array"},"reason":{"maxLength":2048,"minLength":1,"title":"Reason","type":"string"},"time_limit":{"anyOf":[{"$ref":"#/$defs/AthleteTimeLimitV1"},{"type":"null"}],"default":null}},"required":["ops","reason"],"title":"WorkoutOpListV1","type":"object"}},"anyOf":[{"$ref":"#/$defs/EditWorkout"},{"$ref":"#/$defs/EditLiveWorkout"}],"title":"EditWorkoutInput","type":"object"},"outputSchema":{"type":"object","additionalProperties":true},"annotations":{"readOnlyHint":false,"destructiveHint":true,"openWorldHint":false,"idempotentHint":true},"securitySchemes":[{"type":"oauth2","scopes":["program:write"]}]},{"name":"athos_open_app","title":"Open Athos","description":"Open the connected athlete's actual Athos app after they choose panel or browser. Use presentation=panel to show the app beside this conversation where supported; use presentation=browser to provide a private single-use Open/Copy link without loading the panel. Each request issues a fresh two-minute handoff. The same saved account and program are used by chat and the app. Requires app-access consent. Account security, data-sharing setup and administration require direct Athos sign-in. Never copy private handoff metadata into chat; hosts without app UI can use the ordinary returned URL and sign in.","inputSchema":{"type":"object","properties":{"target":{"type":"string","enum":["dashboard","program","workout","week"],"default":"dashboard"},"presentation":{"type":"string","enum":["panel","browser"],"default":"panel"}},"additionalProperties":false},"outputSchema":{"type":"object","properties":{"url":{"type":"string"},"target":{"type":"string","enum":["dashboard","program","workout","week"]},"presentation":{"type":"string","enum":["panel","browser"]}},"required":["url","target","presentation"],"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false,"openWorldHint":false},"securitySchemes":[{"type":"oauth2","scopes":["app:open"]}],"_meta":{"ui":{"resourceUri":"ui://athos/app-v2.html","visibility":["model","app"]},"openai/outputTemplate":"ui://athos/app-v2.html","openai/widgetAccessible":true,"openai/ui":{"entrypoints":[{"type":"global"},{"type":"thread"}]},"openai/toolInvocation/invoking":"Opening your Athos app","openai/toolInvocation/invoked":"Athos is ready"}}],"verification":{"tool_calls":[{"name":"athos_get_connection","arguments":{}},{"name":"athos_get_onboarding","arguments":{}}],"success_criteria":["Complete MCP initialization and tools/list; confirm the documented program and onboarding tools are present.","A tool error (isError=true) is not success; do not claim the connection or saved state is verified.","Read the authenticated connection and onboarding state before deciding whether to resume, start, or coach.","Use athos_get_program only when a current program is available and the user asks for program coaching.","Never claim interview progress, a correction, confirmation, or a ready program unless Athos returns it.","Only athos_confirm_onboarding may confirm the reviewed revision and start generation, after explicit user approval.","Pass the review_token from the current Athos read unchanged, with its exact revision/version and approval=true; never reuse it after a correction."]},"example_prompt":"Start or resume my Athos onboarding. Check what is already saved before asking me questions. Offer to summarize relevant fitness details I have shared in this conversation, then let me confirm what to reuse before saving."}