-
Notifications
You must be signed in to change notification settings - Fork 26
Document Devin Outposts on E2B #308
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Merged
Changes from all commits
Commits
Show all changes
7 commits
Select commit
Hold shift + click to select a range
a117826
Document Devin Outposts setup and operations
matthewlouisbrockman df6ebeb
Tighten the Devin Outposts internal guide
matthewlouisbrockman f468f83
Document Devin Outposts early access
matthewlouisbrockman 8ac0776
Prepare Devin Outposts guide for public launch
matthewlouisbrockman 7028b44
Cross-link the Devin Outposts guide
matthewlouisbrockman dd43490
Add the Devin icon to the Outposts guide
matthewlouisbrockman df61ec6
Document the Devin Outposts CLI launch
matthewlouisbrockman File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,128 @@ | ||
| --- | ||
| title: "Devin Outposts" | ||
| description: "Run Devin sessions in isolated E2B sandboxes." | ||
| icon: "/images/icons/devin.svg" | ||
| --- | ||
|
|
||
| The public `devin-outposts` template runs a dispatcher in E2B. The dispatcher | ||
| watches one Devin outpost and creates a dedicated `devin-outposts-worker` | ||
| sandbox for each session. | ||
|
|
||
| Create the dispatcher and connect to its terminal with the E2B CLI: | ||
|
|
||
| ```bash | ||
| e2b sbx create devin-outposts | ||
| ``` | ||
|
|
||
| When the dispatcher is ready, the terminal prints its authenticated Outposts UI | ||
| URL. You can also launch it directly from the | ||
| [E2B dashboard](https://e2b.dev/dashboard/terminal?template=devin-outposts), or | ||
| from TypeScript: | ||
|
|
||
| ```ts | ||
| import { Sandbox } from "e2b" | ||
|
|
||
| const sandbox = await Sandbox.create("devin-outposts", { | ||
| timeoutMs: 60 * 60_000, | ||
| lifecycle: { onTimeout: "pause", autoResume: true }, | ||
| }) | ||
|
|
||
| const { stdout } = await sandbox.commands.run( | ||
| 'node /opt/devin-outposts/create-launch-url.mjs "$E2B_DOMAIN"', | ||
| { envs: { E2B_DOMAIN: process.env.E2B_DOMAIN ?? "e2b.app" } }, | ||
| ) | ||
|
|
||
| console.log(stdout.trim()) | ||
| ``` | ||
|
|
||
| ## Prerequisites | ||
|
|
||
| - an E2B API key | ||
| - a Devin Enterprise organization | ||
| - a Devin v3 service-user token beginning with `cog_` | ||
|
|
||
| Give the primary service user both **Use outpost machine** and **Manage | ||
| outposts**. Create it under **Settings → Devin API → Service users**, then copy | ||
| the token when Devin displays it. If you configure a separate worker token, it | ||
| only needs **Use outpost machine**. | ||
|
|
||
| See [Cognition's Outposts guide](https://docs.devin.ai/cloud/outposts/overview) | ||
| for the current permission and token flow. | ||
|
|
||
| ## Set up the dispatcher | ||
|
|
||
| <Steps> | ||
| <Step title="Launch the template"> | ||
| Run the SDK example or open the dashboard link above. Open the exact | ||
| setup URL printed by the sandbox. Its token works once and expires after 10 | ||
| minutes. Treat the URL as a credential until it has been used: do not share | ||
| it or leave it in shared logs. | ||
| </Step> | ||
| <Step title="Connect Devin"> | ||
| Enter the primary service-user token and choose **Check Devin account**. | ||
| Select the organization and enter its full browser URL, including | ||
| `/org/<organization-slug>`, if it was not detected. | ||
| </Step> | ||
| <Step title="Choose the outpost"> | ||
| Select an existing outpost or create one. Keep `devin-outposts-worker` as | ||
| the worker template unless you have prepared a custom template or snapshot. | ||
| </Step> | ||
| <Step title="Connect E2B"> | ||
| Enter the E2B API key that should create the worker sandboxes. | ||
| </Step> | ||
| <Step title="Start the dispatcher"> | ||
| Choose **Save and start dispatcher**. Wait until its status shows that it is | ||
| listening before sending a task. | ||
| </Step> | ||
| </Steps> | ||
|
|
||
| ## Run a session | ||
|
|
||
| 1. Under **Tasks**, enter the task and choose **Review task in Devin**. | ||
| 2. In Devin, open **Configuration → Virtual environment** and select the | ||
| configured outpost. | ||
| 3. Send the task. | ||
| 4. Return to **Tasks** in the dispatcher to follow the session. Use **View in | ||
| Devin** to open the original conversation. | ||
|
|
||
| The virtual environment must be selected before sending. A session sent to the | ||
| wrong environment cannot be moved; start a new session with the correct | ||
| outpost. | ||
|
|
||
| Each Devin session gets its own E2B worker sandbox and writable `/mnt/repos` | ||
| workspace. The dispatcher removes the worker after the session finishes. | ||
|
|
||
| ## Lifecycle | ||
|
|
||
| Do not pause the dispatcher while it needs to accept sessions. Devin queue | ||
| traffic cannot wake it. With `lifecycle.autoResume` (JavaScript) / | ||
| `lifecycle.auto_resume` (Python) enabled, opening its E2B URL resumes it manually. | ||
|
|
||
| ## Troubleshooting | ||
|
|
||
| <AccordionGroup> | ||
| <Accordion title="The outpost is missing in Devin"> | ||
| Confirm that Devin is using the organization selected during setup and that | ||
| the primary service user has both required permissions. | ||
| </Accordion> | ||
| <Accordion title="The session is waiting for a machine"> | ||
| Confirm that the dispatcher is listening and that the task was sent to the | ||
| same outpost. | ||
| </Accordion> | ||
| <Accordion title="The worker template is unavailable"> | ||
| Confirm that the E2B API key can create the public | ||
| `devin-outposts-worker` template. A custom template must be visible to the | ||
| same E2B team as the key. | ||
| </Accordion> | ||
| <Accordion title="Inspect the dispatcher"> | ||
| Open its terminal and run: | ||
|
|
||
| ```bash | ||
| tail -200 /home/user/devin-supervisor.log | ||
| jq '{state, detail, activeCount, provisioningCount}' \ | ||
| /home/user/.config/devin-outposts/worker-status.json | ||
| ``` | ||
| </Accordion> | ||
| </AccordionGroup> | ||
|
|
||
| See the [demo](https://share.descript.com/view/XNZQMQBGf9m) for a complete run. | ||
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Missing e2b install instructions
Medium Severity
The TypeScript example imports
e2b, but the page never tells readers to install that package (for example vianpm install e2b), so copying the launch snippet fails on a clean machine.Triggered by learned rule: Code examples must not import packages missing from install instructions
Reviewed by Cursor Bugbot for commit 8ac0776. Configure here.