Build a Cursor/Windsurf-style coding agent

~20 min TypeScript Python

What you’re building: a coding agent that works in an isolated machine instead of on a laptop: clone a repo, make changes, run tests, and hand back a diff.

Primitives you’ll use: Organization, Sandboxes, Agents, Deployments, Custom domains

What you’re building

Cursor and Windsurf put an agent next to your code. The cloud version of that idea is what you build here: every task gets its own sandbox, the agent clones the repository, edits files, runs tests, and returns a diff or a preview, all without touching a developer’s machine.

MIOSA makes the machine disposable and reproducible. Snapshot before a risky change, fork to try two approaches in parallel, and destroy the workspace when the task is done. The agent harness, the model, and the review UI stay yours; MIOSA provides the isolated workspace and the file and exec APIs.

Because the working copy is a sandbox, a fleet of these runs scales horizontally with no shared state.

What you need on MIOSA

Architecture

Step 1: Create an account and an API key

Install the CLI, sign in, and mint a key for your product. The secret is printed once; store it as an environment variable, never in code.

npm i -g @miosa/cli
miosa login
miosa whoami
miosa api-key create coding-agent-key --preset agent     # prints the secret once
export MIOSA_API_KEY="msk_u_..."

Both SDKs read MIOSA_API_KEY from the environment, so a server or a worker needs nothing else. See API keys for scopes and how to create keys in the console.

Step 2: Create the resources

Step 3: Wire the agent loop

If two approaches are worth trying, sandbox.fork() gives you a branch to run the second one without disturbing the first.

Step 4: Preview

A Preview is a throwaway public URL for a port inside the machine. Start the app as a background process so it survives the CLI disconnecting, then expose its port.

Open the exact Preview URL MIOSA returns.

Step 5: Deploy

Publish the machine to an immutable Deployment. Give it the source machine, the path the app lives at inside it, and the command that serves it.

Publishing the same deployment name again creates a new immutable version and keeps the same URL. Roll back with miosa deploy rollback coding-agent --to <version-id>, and inspect a live app with miosa deploy logs coding-agent -n 100. See Publishing and Rollback.

Step 6: Custom domain

Attach a domain your customer owns to the deployment. The platform URL keeps working while DNS propagates.

miosa deploy domain-add coding-agent app.example.com
miosa deploy domains coding-agent          # shows the DNS record and verification target
miosa deploy domain-verify coding-agent <domain-id>

Copy the exact DNS record MIOSA shows into the customer’s DNS provider; for a subdomain it is normally a CNAME. Once verified and TLS is active, MIOSA routes the domain to the deployment’s active version. In code, read the URL from the publish response instead of building it: the SDK method is miosa.deployments.domains.add(deploymentId, { domain }) (TypeScript) or miosa.deployments.domains(deployment_id).add(domain=...) (Python). See Domains.

Costs and limits

Everything bills while it runs: machines (sandboxes and computers) by the second, managed databases while running, and deployments when they serve. Pausing a machine stops compute billing but keeps disk. Set an --idle-timeout or a --ttl so a forgotten machine cannot run forever, and cap spend with rate limits and per-workspace quotas.

Next steps

Was this page helpful?