"""Molecule AI remote-agent SDK — build agents that run outside the platform network and register as first-class workspaces. This is the Phase 30.8 companion to ``molecule_plugin`` (for plugin authors). Where ``molecule_plugin`` helps you ship installable behavior for workspaces that already exist, ``molecule_agent`` helps you *be* a workspace from the other side of the wire: register, authenticate, pull secrets, heartbeat, and detect pause/resume/delete — all via the Phase 30.1–30.5 HTTP contract. Intended usage:: from molecule_agent import RemoteAgentClient client = RemoteAgentClient( workspace_id="550e8400-e29b-41d4-a716-446655440000", platform_url="https://your-platform.example.com", agent_card={"name": "my-remote-agent", "skills": []}, ) client.register() # mints + persists the auth token env = client.pull_secrets() # decrypted secrets dict client.run_heartbeat_loop() # background heartbeat + state-poll See ``sdk/python/examples/remote-agent/`` for a runnable demo. Design notes: * **No async.** The SDK uses blocking ``requests`` so a remote agent author can embed it in any event loop / thread / script without forcing anyio. * **Token cached on disk** at ``~/.molecule//.auth_token`` with 0600 permissions, so a restart of the agent doesn't re-issue a token (the platform refuses to issue a second token when one is on file). * **Pause/delete detection is polling-based** because remote agents usually can't expose an inbound WebSocket reachable from the platform. """ from __future__ import annotations from .client import PeerInfo, RemoteAgentClient, WorkspaceState __all__ = ["RemoteAgentClient", "WorkspaceState", "PeerInfo", "__version__"] __version__ = "0.1.0"