Skip to main content
The managed-research PyPI package is the supported Python surface for Managed Research. Repository: github.com/synth-laboratories/managed-research. Install:
uv pip install managed-research
# or: pip install managed-research
ManagedResearchClient is the canonical entrypoint:
from managed_research import ManagedResearchClient

client = ManagedResearchClient()
Use Python SDK Quickstart for a first run. Use MCP Tool Reference for parity with agent tools; MCP and SDK expose the same platform contract, differing only by integration style.

Client layout

MemberRole
client.projectsList projects, create_runnable, schedule and notes helpers, default project access.
client.project(project_id)Returns ManagedResearchProjectClient for one project’s APIs.
client.runsStart one-off runs, list runs, preflight, and other run entrypoints on the shared client.
client.run(project_id, run_id)Returns RunHandle for poll, messages, artifacts, checkpoints, and branches.
client.workspace_inputsAttach source repo, workspace uploads, workspace input summaries.
client.progressProject setup and launch preparation helpers.
client.setupSetup flows aligned with onboarding.
client.approvalsRun approvals and human-in-the-loop responses.
client.filesRun output files and work-file nouns.
client.githubGitHub connection and repo listing for setup.
client.exportsExport destination configuration.
client.outputsWork products, exports, and container eval packages.
client.prsResult PR listing and fetch.
client.readinessPlatform readiness checks.
client.reposWork repos attach and detach.
client.datasetsWork datasets list, upload, download.
client.modelsResults model listing, get, download, export.
client.repositoriesRepository catalog operations on projects.
client.credentialsCredential reference helpers.
client.logsRun log archive listing.
client.integrationsIntegration helpers exposed by the SDK transport.
client.usageBilling and usage surfaces.
client.trained_modelsRegister, export, and manage trained models.
client.work_productsDurable work product access.
client.run_costRun-level cost summaries.
Convenience methods on the root client mirror common usage calls: get_billing_entitlements, get_run_usage, get_project_usage, get_project_economics. Launch payload helpers live in managed_research.sdk.launch (for example build_project_run_payload), not as a separate LaunchAPI on the client.

Typical run flow

created = client.projects.create_runnable({"name": "Improve eval reliability"})
project_id = created.project_id
project = client.project(project_id)
project.repositories.attach(github_repo="owner/repo")
preflight = project.runs.preflight(
    host_kind="daytona",
    work_mode="directed_effort",
    providers=[{"provider": "openrouter"}],
    runbook="lite",
)
run = project.runs.start(
    "Kickoff message …",
    host_kind="daytona",
    work_mode="directed_effort",
    providers=[{"provider": "openrouter"}],
    runbook="lite",
)
run.wait()
project.runs.start returns a RunHandle bound to the project and run identifiers. You can also obtain one with client.run(project_id, run_id) when you only have identifiers from elsewhere. Exact method names on ManagedResearchProjectClient and RunsAPI match the published package; prefer your IDE autocomplete or the repository sdk/ modules for signatures.

Launch fields

Common launch fields are documented in Launch Fields. Backend preflight remains authoritative.
run = client.runs.start(
    "Review the repo and leave evidence.",
    host_kind="daytona",
    work_mode="directed_effort",
    providers=[{"provider": "openrouter"}],
    runbook="lite",
    agent_harness="codex",
    agent_model="gpt-5.4-mini",
    agent_model_params={"reasoning_effort": "medium"},
)

Compatibility note

SmrControlClient may remain importable for compatibility, but new docs and integrations should use ManagedResearchClient.

Errors

Launch-time denials raise errors instead of returning success-shaped payloads. Use preflight when you need structured blocker data before runtime spend.