Connect the workspace once
authorization_url returned by connect. It handles the required installation/user authorization. After the browser completes, repeat the same connect request/key until its status is connected; do not replay callback codes or assemble separate installation and OAuth links.
In CLI JSON, the browser URL is authorization.authorization_url; the status command returns github.connection.settings_url. MCP and REST return the authorization/status objects directly. The link lasts thirty minutes. While pending, last_failure provider_unavailable or authorization_code_rejected means open the same authorization link again and retain the same key. Failed/expired is final: account_admin_required needs the account owner or organization admin, denied means consent was declined, installation_access_required means the App lacks that account installation, and session_inactive needs fresh login. Resolve that cause and use a new connect key for the same workspace.
Link a covered repository
Select the existing or newly createdPROJECT_ID, then run:
connection.settings_url, add the repository to that installation and repeat the original link arguments/key. Do not create another project or request a provider token. From the repository root, link records .ohmyhost/ and adds /.ohmyhost/ to .gitignore; later commands may omit --project. With links for several organizations, name the project or saved profile.
Deploy the intended revision
COMMIT_SHA is the full SHA of the pushed revision. The plan inspects that source, returns requirements and lasts twenty-four hours. Once ready, execute it, or plan/deploy in one step with ohmyhost deploy --project "$PROJECT_ID" --commit "$COMMIT_SHA" --idempotency-key "$DEPLOY_REQUEST_KEY" --yes --json.
GitHub authorization alone does not start a build. Direct local archive uploads are not a deployment source. Private runtime secrets travel through the separate secret workflow, not through the source archive.
Automatic deployment
Where the returned source capability is available, explicitly choose a branch:latest_operation_id, including a plan rejection: explicitly plan that SHA for its exact source error, then fix/push again. Automatic deployment is a CLI feature. Use the set command with --enabled false and a new intentional-change key to turn it off. Troubleshooting.