Skip to content

feat(orca): add Orca VM recipe plugin - #23

Merged
pratikbin merged 2 commits into
mainfrom
feat/orca-plugin
Aug 26, 2026
Merged

feat(orca): add Orca VM recipe plugin#23
pratikbin merged 2 commits into
mainfrom
feat/orca-plugin

Conversation

@pratikbin

Copy link
Copy Markdown
Contributor

Adds packages/orca-plugin, which lets Orca run a whole workspace on a disposable CreateOS Sandbox instead of the user's laptop.

Pairs with NodeOps-app/createos-cli#78, which adds the createos setup orca command this recipe calls. That PR should merge first — without it the recipe's commands do not exist.

What's in the package

Three files, no code:

File Purpose
orca-plugin.json Manifest. Declares one contributes.vmRecipes entry.
vm-recipe.json The recipe. Points create and destroy at createos setup orca --recipe.
README.md Setup, configuration, limits, troubleshooting.

Orca selects the lifecycle phase with ORCA_VM_MODE, so both commands are the same string and the CLI branches internally.

Design notes

Checkout is pushed, not cloned. The recipe uses provisioned-root, so the sandbox builds the checkout and Orca adopts it. The user's working tree is uploaded — uncommitted edits included — which means no git token ever reaches the sandbox and private repositories work with no extra setup.

A git remote is required. Orca confirms the adopted checkout is the same project by comparing git remote identities. A repo with no remote gets a host-local identity that can never match on another machine, and creation fails with Imported folder does not match the selected project identity. That message does not hint at the cause, so the README calls it out with the fix.

No suspend or resume. SSH does not reliably come back after a sandbox resume, and Orca's schema requires the pair or neither. Every workspace is destroy-and-recreate.

Install route

Installing by git URL does not work yet. Orca's installer clones a whole repository and requires orca-plugin.json at its root, so this monorepo subdirectory cannot be installed that way — it would need its own single-package repo. The working route today is Settings > Plugins > Dev Paths pointed at packages/orca-plugin.

This is documented in the package README and in CLAUDE.md rather than left for users to discover. The createos setup orca help text prints the same instructions.

Verification

The manifest and recipe were validated against Orca's own parsers (parsePluginManifest, parsePluginVmRecipeArtifact), including a negative control confirming the validator rejects a bad recipe — so "valid" is a real result, not a broken harness.

End-to-end through Orca's UI on a real project: the recipe appears under Run on > Per-Workspace Environment, provisions a sandbox, wires SSH, seeds the checkout on a workspace-named branch, and Orca adopts it and opens the workspace. Destroy removes the sandbox; no leaks (createos sandbox list checked).

Notes for the reviewer

  • The root README.md and CLAUDE.md fail prettier --check at main already. I left them as-is rather than bundling an unrelated reformat into this PR; the new package README is prettier-clean.
  • Known limit, documented: uploads around 400 MB and above can return a 503 partway through. Tracked separately, not introduced here.

Register a per-workspace environment that runs an Orca workspace on a
disposable CreateOS Sandbox instead of the user's laptop.

The package holds no code. orca-plugin.json declares one vmRecipes
contribution, and vm-recipe.json points create and destroy at
`createos setup orca --recipe`, which does the work.

The recipe uses provisioned-root checkout: the sandbox builds the
checkout and Orca adopts it, so the working tree is pushed rather than
cloned and no git token reaches the box. Orca confirms the adopted
checkout by matching git remote identity, so a project without a remote
cannot use this recipe -- the README says so, since the error Orca
raises does not.

Suspend and resume are deliberately absent. SSH does not reliably come
back after a sandbox resume, and Orca's schema requires the pair or
neither.

Installing by git URL does not work yet: Orca's installer clones a whole
repository and expects orca-plugin.json at its root, so this monorepo
subdirectory needs the Dev Paths route. Documented rather than left for
users to discover.
The CLI moved `setup` under the sandbox group, so the recipe's create and
destroy commands and the README's doctor example move with it. The
command string is the contract between this plugin and the CLI, so the
two have to change together.
@pratikbin
pratikbin merged commit 17f969c into main Aug 26, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant