> ## Documentation Index
> Fetch the complete documentation index at: https://namespace.so/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Devin on Devboxes

export const GuideFlow = ({id, title, frameSize = "wide"}) => {
  const paddingBottom = frameSize === "small" ? "calc(56.23387790197765% + 10px)" : frameSize === "medium" ? "calc(56.23387790197765% + 47px)" : "calc(62.004487658937926% + 47px)";
  return <div style={{
    position: "relative",
    paddingBottom,
    height: 0
  }}>
			<iframe id={id} title={title || "Step-by-step guide"} src={`https://app.guideflow.com/embed/${id}`} width="100%" height="100%" style={{
    overflow: "hidden",
    position: "absolute",
    border: "none"
  }} allow="clipboard-read; clipboard-write" allowFullScreen />
		</div>;
};

export const CenteredImage = ({src, alt, width, caption, className}) => {
  const [basePath, setBasePath] = useState("");
  useEffect(() => {
    const path = window.location.pathname;
    setBasePath(path === "/docs" || path.startsWith("/docs/") ? "/docs" : "");
  }, []);
  return <Frame caption={caption} className={className} style={{
    maxWidth: width,
    marginInline: "auto"
  }}>
			<OptimizedImage src={`${basePath}${src}`} alt={alt} />
		</Frame>;
};

export const DevinOutpostsDiagram = () => {
  const NamespaceMark = ({size = 32}) => <img className="ns-diagram-mark" src="/docs/favicon.svg" alt="" width={size} height={size} />;
  const DevinMark = ({size = 32}) => <span className="ns-diagram-mark ns-diagram-mark-devin" style={{
    width: size,
    height: size
  }}>
			<svg width={Math.round(size * 0.58)} height={Math.round(size * 0.58)} viewBox="0 0 24 24" fill="none" aria-hidden="true">
				<path d="M4 12a8 8 0 1 1 3.2 6.4L4 20l1.2-3.4A7.96 7.96 0 0 1 4 12Z" stroke="currentColor" strokeWidth="1.6" strokeLinejoin="round" />
				<circle cx="9" cy="12" r="1" fill="currentColor" />
				<circle cx="12" cy="12" r="1" fill="currentColor" />
				<circle cx="15" cy="12" r="1" fill="currentColor" />
			</svg>
		</span>;
  const ControlPlaneMark = ({size = 32}) => <span className="ns-diagram-mark ns-diagram-mark-control" style={{
    width: size,
    height: size
  }}>
			<svg width={Math.round(size * 0.55)} height={Math.round(size * 0.55)} viewBox="0 0 24 24" fill="none" aria-hidden="true">
				<circle cx="12" cy="12" r="2.5" fill="currentColor" />
				<circle cx="5" cy="5" r="1.5" fill="currentColor" />
				<circle cx="19" cy="5" r="1.5" fill="currentColor" />
				<circle cx="5" cy="19" r="1.5" fill="currentColor" />
				<circle cx="19" cy="19" r="1.5" fill="currentColor" />
				<path d="M12 12L5 5M12 12l7-7M12 12l-7 7M12 12l7 7" stroke="currentColor" strokeWidth="1.4" strokeLinecap="round" />
			</svg>
		</span>;
  const TerminalMark = ({size = 32}) => <span className="ns-diagram-mark ns-diagram-mark-terminal" style={{
    width: size,
    height: size
  }}>
			<svg width={Math.round(size * 0.55)} height={Math.round(size * 0.55)} viewBox="0 0 24 24" fill="none" aria-hidden="true">
				<rect x="3" y="4" width="18" height="14" rx="2" stroke="currentColor" strokeWidth="1.8" />
				<path d="M7 9l3 3-3 3M13 15h4" stroke="currentColor" strokeWidth="1.8" strokeLinecap="round" strokeLinejoin="round" />
			</svg>
		</span>;
  const DiagramCard = ({mark, label, sublabel, brand = false}) => <div className={`ns-diagram-card${brand ? " ns-diagram-card-brand" : ""}`}>
			{mark}
			<div className="ns-diagram-card-copy">
				<span className="ns-diagram-card-label">{label}</span>
				<span className="ns-diagram-card-sublabel">{sublabel}</span>
			</div>
		</div>;
  const ZoneHeader = ({owner, mark}) => <div className="ns-diagram-zone-header">
			{mark}
			<span>{owner}</span>
		</div>;
  const Zone = ({brand = false, children}) => <section className={`ns-diagram-zone${brand ? " ns-diagram-zone-brand" : ""}`}>
			{children}
		</section>;
  const SessionZone = ({label}) => <Zone>
			<ZoneHeader owner="Devin" mark={<DevinMark size={14} />} />
			<DiagramCard mark={<DevinMark size={36} />} label={`Session ${label}`} sublabel="Model, planning & context" />
		</Zone>;
  const DevinConnector = ({management = false}) => <div className={`ns-devin-connector${management ? " ns-devin-management-connector" : ""}`} aria-hidden="true">
			<div className="ns-devin-connector-line" />
			<div className="ns-diagram-arrow-down" />
			<span>{management ? "launch & manage" : <>tool calls<br />& events</>}</span>
		</div>;
  const ControlPlanePill = () => <div className="ns-control-plane-pill">
			<ControlPlaneMark size={18} />
			<span>Namespace control plane</span>
		</div>;
  const MobileSessionLane = ({label}) => <div className="ns-devin-mobile-lane">
			<SessionZone label={label} />
			<div className="ns-devin-mobile-connectors">
				<DevinConnector />
				<DevinConnector management />
			</div>
			<Zone brand>
				<ZoneHeader owner="Namespace" mark={<NamespaceMark size={14} />} />
				<ControlPlanePill />
				<DiagramCard brand mark={<TerminalMark size={36} />} label={`Devbox ${label}`} sublabel="Runs the Devin worker" />
			</Zone>
		</div>;
  const label = "Every Devin session connects to its own isolated Namespace Devbox while the Namespace control plane launches and manages the environments.";
  return <figure className="ns-diagram not-prose" role="img" aria-label={label}>
			<div className="ns-diagram-grid-background" aria-hidden="true" />
			<div className="ns-diagram-content">
				<div className="ns-devin-desktop-layout">
					<div className="ns-devin-sessions">
						<SessionZone label="A" />
						<SessionZone label="B" />
					</div>
					<div className="ns-devin-connectors">
						<div><DevinConnector /><DevinConnector management /></div>
						<div><DevinConnector /><DevinConnector management /></div>
					</div>
					<Zone brand>
						<ZoneHeader owner="Namespace" mark={<NamespaceMark size={14} />} />
						<ControlPlanePill />
						<div className="ns-devin-devboxes">
							<DiagramCard brand mark={<TerminalMark size={36} />} label="Devbox A" sublabel="Runs the Devin worker" />
							<DiagramCard brand mark={<TerminalMark size={36} />} label="Devbox B" sublabel="Runs the Devin worker" />
						</div>
					</Zone>
				</div>
				<div className="ns-devin-mobile-layout">
					<MobileSessionLane label="A" />
					<MobileSessionLane label="B" />
				</div>
			</div>
			<figcaption className="ns-diagram-caption">{label}</figcaption>
		</figure>;
};

[Devin](https://devin.ai) agents are natively supported on Namespace Devboxes. When you run a new Devin session, Namespace provisions a fresh Devbox for it. Devin’s agent loop (inference and planning) continues to run in Devin’s cloud, while all command execution, file edits, and repository access happen on Namespace Devboxes.

## Overview

### What is Devin?

Devin, built by Cognition, is an autonomous AI software engineer that can write, run, and test code. You hand it a scoped task, such as a ticket, a bug to reproduce, or a migration, and it works through the problem on its own using a shell, an editor, a browser, and any tool available to it.

### What are Devboxes?

Devboxes are high-performance environments built for code workflows like builds and tests. They give agents a complete and isolated machine to work on a project, so they can clone a repository, install dependencies, write and compile code, run tests, and do whatever else the task requires.

Devboxes run on both Linux and macOS, and offer all the tools you'd expect on a development machine, from Docker to language toolchains like Bazel and Gradle. The macOS environments also include tools like iOS simulators for building and testing mobile apps.

### How it works

<DevinOutpostsDiagram />

Cognition handles orchestration: the agent loop, planning, context management, and inference all run in Devin's cloud.

Namespace handles execution: shell commands, file edits, repository access, builds, and test runs all happen on a Devbox.

The connection between them is built on [Devin Outposts](https://docs.devin.ai/cloud/outposts/overview). When you start a session in Devin Cloud and select a Namespace virtual environment, the session is queued for a worker. Namespace claims it, provisions a fresh Devbox, and starts the Devin worker inside it. The worker opens an outbound connection to Devin's cloud and runs the session's tool calls locally on the Devbox. Only outbound HTTPS is used, so there are no inbound ports, public IPs, or VPN tunnels to configure.

When the session ends, the worker exits and Namespace tears the Devbox down, so each session gets a clean environment and nothing is left running afterward.

## Getting Started

### Requirements

Before you start you need the following pieces:

* [Namespace account](https://cloud.namespace.so)
* [Devin Cloud account](https://app.devin.ai/auth/login)

<Steps titleSize="h3">
  <Step id="create-devbox-blueprint" title={<span>Create Devbox blueprint</span>}>
    Next, create a Devbox blueprint, which defines the core configuration for the Devbox environment.

    Navigate to the [Devbox Blueprints](https://cloud.namespace.so/workspace/devboxes/blueprints) page, and press the **New Blueprint** button.

    Configure the following:

    * `Name` - the name of your blueprint, how you want it to appear in Devin Cloud
    * `Operating system` - pick between Linux or macOS
    * `Base image` - for macOS, this lets you choose the version of macOS and Xcode
    * `Machine size` - to select vCPU and RAM for the Devbox
    * `Access mode` - you **must** set it to **Workspace-wide (shared)**

    <GuideFlow id="0p00gj6cyp" title="Guide: Create a Devbox Blueprint" frameSize="wide" />

    See [blueprint configuration](/docs/devbox/blueprint#additional-configuration) for more configuration options.
  </Step>

  <Step id="add-devbox-blueprint-to-your-devin-org" title={<span>Add Devbox blueprint to your Devin org</span>}>
    Now, add the blueprint to your Devin organization, to make it available as virtual environments in Devin Cloud.

    Press **Connect with Devin** and follow the instructions.

    <GuideFlow id="vkmo4n9c3p" title="Guide: Connect the Devbox blueprint to your Devin org" frameSize="wide" />
  </Step>

  <Step id="running-the-agent" title={<span>Running the agent</span>}>
    And now, you can run a Devin session on a Devbox.

    Head to your Devin Cloud dashboard, and open the "New session" page. Click **Settings** , expand Virtual environments and select the Devbox blueprint you created earlier.

    <CenteredImage width={800} alt="How to select Devbox as virtual environment" src="/docs/images/devboxes/devin/devin-ui-select-devbox.png" />

    And ask your agent to tell you the OS version of the machine it is running on:

    ```bash theme={null}
    What is the OS version and flavor?
    ```

    <CenteredImage width={800} alt="Showing Devin agent responding with macOS 15.7.5 (Sequoia)" src="/docs/images/devboxes/devin/devin-ui-what-os-version.png" />
  </Step>
</Steps>
