Skip to content

Quickstart

End-to-end: discover an idle pool, validate a workflow, submit it, watch it run.

1. Wire up the agent

from strands import Agent
from strands_osmo import (
    osmo_doctor,
    osmo_pool_list,
    osmo_workflow_validate,
    osmo_workflow_submit,
    osmo_workflow_status,
    osmo_workflow_logs,
    osmo_workflow_cancel,
    osmo_cookbook_fetch,
)

agent = Agent(tools=[
    osmo_doctor,
    osmo_pool_list,
    osmo_workflow_validate,
    osmo_workflow_submit,
    osmo_workflow_status,
    osmo_workflow_logs,
    osmo_workflow_cancel,
    osmo_cookbook_fetch,
])

2. Sanity-check the environment

agent("Run osmo_doctor and tell me if anything is misconfigured.")

3. Pick a pool

agent("List all pools showing free GPUs. Recommend one for training.")

4. Submit a recipe from the cookbook

agent("""
Fetch the GR00T fine-tune recipe from the cookbook,
save it locally, validate it, then submit to your recommended pool.
Report the workflow ID.
""")

5. Monitor

agent("Watch workflow <id>. Tell me when it changes state.")

6. Recover from failures

agent("""
If workflow <id> fails:
  - if it's a quota error, retry with priority=LOW
  - if it's an OOM, halve the memory request and retry
  - otherwise, fetch the last 100 log lines and explain the failure
""")

That's it - you have an agent that can do anything an OSMO operator can, from a single prompt.

Continue to the Submitting Workflows guide