{"id":25,"date":"2026-07-18T15:47:09","date_gmt":"2026-07-18T15:47:09","guid":{"rendered":"https:\/\/resources.stage.magicassist.co\/blog\/local-cloud-runtimes\/"},"modified":"2026-07-18T15:47:09","modified_gmt":"2026-07-18T15:47:09","slug":"local-cloud-runtimes","status":"publish","type":"post","link":"https:\/\/magicassist.co\/blog\/local-cloud-runtimes\/","title":{"rendered":"Where your AI agent work happens"},"content":{"rendered":"<h2 class=\"wp-block-heading\">Your agent works where its tools and files live<\/h2>\n<p class=\"wp-block-paragraph\">MagicAssist is the shared control room, not the machine that does every task. The actual work happens in a connected environment that has the right files, tools, and approved access. That environment might be a laptop, a dedicated computer, or a private server. You do not need to master the infrastructure to make a good choice. Start with what the task needs and what it should never reach.<\/p>\n<p class=\"wp-block-paragraph\">This split is a core product decision. It lets the team coordinate work in one workspace without requiring every repository, API key, or local tool to live in that workspace. The runtime remains the place where execution access is configured. MagicAssist provides visibility and dispatch around it.<\/p>\n<p class=\"wp-block-paragraph\">Understanding the split also improves troubleshooting. A queued issue may be perfectly written while its runtime is offline. A running task may fail because a local command is missing. A server can be healthy while a daemon has lost authentication. \u201cThe agent is not working\u201d is not one problem; it can occur at several layers.<\/p>\n<h2 class=\"wp-block-heading\">Server, daemon, and coding tool<\/h2>\n<p class=\"wp-block-paragraph\">Each component has a narrow job. The server owns shared coordination. The daemon owns the connection to an execution environment. The coding tool performs the task. Keeping those jobs separate avoids treating the web interface as though it were a remote shell.<\/p>\n<figure class=\"wp-block-table\"><table><thead><tr><th>Layer<\/th><th>Responsibilities<\/th><th>Typical failure signal<\/th><\/tr><\/thead><tbody><tr><td>Server<\/td><td>Issues, comments, assignments, task queue, workspace state, and real-time updates<\/td><td>The workspace or API is unavailable, or dispatch state cannot be recorded<\/td><\/tr><tr><td>Daemon<\/td><td>Tool detection, runtime registration, polling, heartbeat, process launch, and result reporting<\/td><td>Runtime appears offline or tasks remain queued<\/td><\/tr><tr><td>AI coding tool<\/td><td>Repository inspection, tool use, file changes, tests, and task response<\/td><td>The execution fails, reports a blocker, or cannot use a required command<\/td><\/tr><\/tbody><\/table><\/figure>\n<p class=\"wp-block-paragraph\">The daemon is part of the MagicAssist CLI and can run as a background service. On startup it authenticates, detects supported coding tools in its environment, registers the corresponding runtime records, and begins polling for work while sending regular heartbeats. The desktop application can manage a daemon for users who prefer that route.<\/p>\n<p class=\"wp-block-paragraph\">The coding tool remains itself. Claude Code, Codex, and other supported tools have different capabilities, configuration conventions, and ways of discovering Skills or connected tooling. MagicAssist routes work to the configured tool; it does not make every provider behave identically.<\/p>\n<figure class=\"wp-block-image size-large ma-diagram\" tabindex=\"0\" aria-label=\"Horizontally scrollable diagram. Swipe or use arrow keys to explore.\"><img width=\"1024\" height=\"576\" src=\"https:\/\/magicassist.co\/blog\/wp-content\/uploads\/2026\/07\/inline-runtime-architecture-1024x576.webp\" class=\"attachment-large size-large wp-image-265\" alt=\"MagicAssist shared state sends assigned work to a connected runtime, which gives the AI tool access to files and services before returning evidence and status.\" loading=\"lazy\" decoding=\"async\" srcset=\"https:\/\/magicassist.co\/blog\/wp-content\/uploads\/2026\/07\/inline-runtime-architecture-1024x576.webp 1024w, https:\/\/magicassist.co\/blog\/wp-content\/uploads\/2026\/07\/inline-runtime-architecture-300x169.webp 300w, https:\/\/magicassist.co\/blog\/wp-content\/uploads\/2026\/07\/inline-runtime-architecture-768x432.webp 768w, https:\/\/magicassist.co\/blog\/wp-content\/uploads\/2026\/07\/inline-runtime-architecture-1536x864.webp 1536w, https:\/\/magicassist.co\/blog\/wp-content\/uploads\/2026\/07\/inline-runtime-architecture-960x540.webp 960w, https:\/\/magicassist.co\/blog\/wp-content\/uploads\/2026\/07\/inline-runtime-architecture.webp 1600w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">Use this architecture to decide which environment, tools, and access each job requires.<\/figcaption><\/figure>\n<h2 class=\"wp-block-heading\">A runtime is a concrete capability boundary<\/h2>\n<p class=\"wp-block-paragraph\">A runtime represents a daemon and one detected coding tool within a workspace. One machine can therefore expose several runtimes if it has several supported tools installed. The distinction matters because each runtime can have different model access, Skills behavior, external commands, concurrency, and repository availability.<\/p>\n<ul class=\"wp-block-list\"><li>The machine defines which files, repositories, and local services exist.<\/li><li>The installed coding tool defines how the agent executes and which native capabilities it understands.<\/li><li>The daemon reports health and claims eligible tasks.<\/li><li>The agent configuration defines role, provider choice, concurrency, and attached Skills.<\/li><li>The issue defines the current objective and authorized scope.<\/li><\/ul>\n<p class=\"wp-block-paragraph\">This makes runtime selection part of task design. A task that needs a checked-out monorepo should run where that working copy exists. A browser research task should use an environment with the approved browser capability. A deployment review may use a restricted runtime that can inspect configuration but cannot deploy. Do not broaden one runtime&#8217;s access simply because an agent might someday need it.<\/p>\n<h2 class=\"wp-block-heading\">Choose environments by the work they must support<\/h2>\n<p class=\"wp-block-paragraph\">Teams commonly connect personal development machines, dedicated local machines, VPS environments, or other privately managed compute. MagicAssist also offers managed deployment options in which the application, database, and a dedicated runtime can be configured together. The right environment is not a universal \u201clocal versus cloud\u201d preference. It follows from dependencies, continuity, isolation, maintenance, and review.<\/p>\n<p class=\"wp-block-paragraph\">A developer laptop fits work that depends on an active local checkout, desktop-only tools, or hands-on inspection. Its weakness is continuity: it sleeps, travels, changes network, and competes with interactive work. A dedicated machine or VPS fits standing tasks that should remain available independently of one person&#8217;s laptop. Its weakness is maintenance: repositories, credentials, tool versions, storage, and updates need an owner.<\/p>\n<p class=\"wp-block-paragraph\">A hybrid setup is often sensible. Interactive feature work can stay close to the developer&#8217;s active checkout. Recurring reports or repository maintenance can run on a dedicated environment prepared for that purpose. MagicAssist provides one coordination surface across those runtimes, but the team must still design how code and artifacts move between them.<\/p>\n<h2 class=\"wp-block-heading\">Inventory access before assigning the agent<\/h2>\n<p class=\"wp-block-paragraph\">Runtime problems often look like reasoning problems. The agent says it cannot find a repository, a test command fails because the required service is absent, or a connected tool is available on one machine but not another. Prevent this by inventorying dependencies as part of the issue or role design.<\/p>\n<ol class=\"wp-block-list\"><li>Which repository or working directory is required?<\/li><li>Which branch or worktree should the task use?<\/li><li>Which command-line tools and versions are required?<\/li><li>Which network destinations or connected services are authorized?<\/li><li>Which credentials exist in the runtime, and which must remain unavailable?<\/li><li>Where should the resulting artifact be written?<\/li><li>How will a reviewer reach the output without relying on the runtime session?<\/li><\/ol>\n<p class=\"wp-block-paragraph\">The inventory should distinguish availability from permission. A production credential may exist on a VPS, but an issue that asks only for a plan does not authorize its use. A browser may be available, but access to a private dashboard still needs an explicit task boundary. MagicAssist can advertise capabilities and route work; the issue and operating policy define whether using them is appropriate.<\/p>\n<h2 class=\"wp-block-heading\">Online, missing, and saturated are different states<\/h2>\n<p class=\"wp-block-paragraph\">The daemon sends regular heartbeats so MagicAssist can show whether a runtime is online. If heartbeats stop, the runtime is marked missing and in-flight work can fail with a runtime-related reason. When the daemon returns, the runtime can become available again. This protects the queue from pretending a disconnected machine is still executing.<\/p>\n<p class=\"wp-block-paragraph\">An online runtime can still be busy. Concurrency limits exist at both the daemon and agent levels. When the permitted slots are full, new work waits in the queue. Raising limits is not automatically better; parallel tasks compete for CPU, memory, repository locks, rate limits, and reviewer attention. Choose a limit the environment and workflow can support.<\/p>\n<p class=\"wp-block-paragraph\">A healthy runtime can also be incompatible with the task. The assigned agent may use a different coding tool, a required capability may be absent, or the environment may not contain the project. Runtime visibility helps narrow the diagnosis, but the team should inspect the task&#8217;s dependencies rather than treating \u201conline\u201d as proof of readiness.<\/p>\n<h2 class=\"wp-block-heading\">Design recovery before relying on long-running work<\/h2>\n<p class=\"wp-block-paragraph\">If a daemon exits while tasks are dispatched or running, MagicAssist can mark those tasks failed and reclaim retryable work. This is useful infrastructure behavior, not a guarantee that replay is harmless. A task that sends a message, changes an external system, or runs a deployment may produce side effects before the daemon disappears.<\/p>\n<p class=\"wp-block-paragraph\">Make repeatable tasks idempotent where possible. Record which object or commit a run acted on. Check current state before applying a change. Separate preparation from irreversible actions. Ask the agent to report partial completion and open questions. For high-impact work, require human approval before the final external action.<\/p>\n<p class=\"wp-block-paragraph\">Autopilot runs need particular care because their failures are not automatically retried in the same way as common assignment or mention paths. The next schedule may create another run, which can overlap with partial side effects from the first. The Autopilot contract should define how to detect existing work and how reviewers identify a missing or failed run.<\/p>\n<h2 class=\"wp-block-heading\">Keep secrets and source code in the right boundary<\/h2>\n<p class=\"wp-block-paragraph\">The distributed model lets the coding tool use repositories and credentials in the connected environment rather than uploading them into the coordination workspace. That is a useful boundary, but it remains only as strong as the runtime configuration. The daemon and coding tool run with the permissions available to their process.<\/p>\n<ul class=\"wp-block-list\"><li>Give a runtime only the repositories and services required for its role.<\/li><li>Use separate credentials for automation where the external service supports it.<\/li><li>Do not put secrets in issue descriptions, comments, Memory, or Knowledge Base documents.<\/li><li>Review imported Skills and scripts before they reach a privileged runtime.<\/li><li>Keep deployment authority separate from preparation when human approval is required.<\/li><li>Rotate credentials when a runtime changes owner or purpose.<\/li><\/ul>\n<p class=\"wp-block-paragraph\">A managed deployment can reduce setup work, but it does not remove the need to decide which repositories, credentials, and external tools belong on the dedicated machine. Infrastructure ownership may be delegated; access design cannot be.<\/p>\n<h2 class=\"wp-block-heading\">A practical runtime decision<\/h2>\n<p class=\"wp-block-paragraph\">For each recurring agent role, write a one-page runtime profile. Name the machine or environment, coding tool, repositories, expected commands, connected services, concurrency limit, maintenance owner, and review path. Link that profile from the agent&#8217;s maintained context or operating handbook. Do not paste sensitive values into it.<\/p>\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\"><p>Choose a runtime because it has the right dependencies and boundaries for the work, not because \u201clocal\u201d or \u201ccloud\u201d sounds inherently better.<\/p><\/blockquote>\n<p class=\"wp-block-paragraph\">Start one agent on one environment and run a bounded issue. Confirm that the daemon stays online, the coding tool is detected, the repository is correct, progress returns to the issue, and the reviewer can inspect the output. Then test recovery: stop the daemon during a safe task, restart it, and observe the task state. Operational confidence comes from seeing the whole path work, not from the runtime appearing in a list.<\/p>\n<p class=\"wp-block-paragraph\">Once the path is understood, add environments for distinct reasons: continuity, isolation, provider choice, data location, or workload. MagicAssist gives those environments a common queue and visible history. The team gives each one a deliberate purpose.<\/p>","protected":false},"excerpt":{"rendered":"<p>MagicAssist keeps planning in one place while work happens in a connected environment. Choose where each AI agent runs by considering its files, tools, access, continuity, and review needs.<\/p>\n","protected":false},"author":0,"featured_media":164,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[5],"tags":[],"class_list":["post-25","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-guides"],"_links":{"self":[{"href":"https:\/\/magicassist.co\/blog\/wp-json\/wp\/v2\/posts\/25","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/magicassist.co\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/magicassist.co\/blog\/wp-json\/wp\/v2\/types\/post"}],"replies":[{"embeddable":true,"href":"https:\/\/magicassist.co\/blog\/wp-json\/wp\/v2\/comments?post=25"}],"version-history":[{"count":11,"href":"https:\/\/magicassist.co\/blog\/wp-json\/wp\/v2\/posts\/25\/revisions"}],"predecessor-version":[{"id":340,"href":"https:\/\/magicassist.co\/blog\/wp-json\/wp\/v2\/posts\/25\/revisions\/340"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/magicassist.co\/blog\/wp-json\/wp\/v2\/media\/164"}],"wp:attachment":[{"href":"https:\/\/magicassist.co\/blog\/wp-json\/wp\/v2\/media?parent=25"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/magicassist.co\/blog\/wp-json\/wp\/v2\/categories?post=25"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/magicassist.co\/blog\/wp-json\/wp\/v2\/tags?post=25"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}