Add Devin Agent sessions to xmd run #740

Description

@taras

Story

As an executable-document author, I want to run Devin through the existing
<Agent>, <Session>, and <Prompt> components, so one xmd run invocation
can hold useful multi-turn Devin conversations without claiming that they can
be resumed later.

Example

xmd run --default-agent devin review.md
<Sessionname="review">
<Prompt>Inspect the change and identify the highest-risk behavior.</Prompt>
<Prompt>Turn that finding into a regression-test proposal.</Prompt>
</Session>

Both prompts reach the same live Devin conversation. Another named Session in
the same invocation has its own conversation and may run concurrently.

Current gap

ACPX documents Devin as a raw devin acp command rather than a built-in agent.
The current XMD registry therefore resolves devin incorrectly as the bare
command. Even with the command corrected, XMD's ordinary ACP path waits for the
durable first-turn materialization signal used by Codex and Claude. Devin emits
neither that signal nor a provider-native session identity, so treating it as a
durable session would either fail or retain an identity that nothing supports.

The sanitized discovery traces establish the narrower usable protocol boundary:
authentication, prompt streaming, normal completion, and ACP cancellation work
through ACPX's Devin compatibility shim, but it publishes no durable acceptance
or conversation identity. They inform this lifetime decision; reusable
qualification against a live backend belongs to #743.

Contract

xmd run recognizes the agent name devin and launches devin acp. Devin
Sessions are invocation-scoped:

  • prompts in one Session are serialized and continue one live ACP conversation;
  • different Sessions own different live conversations and may execute
    concurrently;
  • cancellation targets the active turn without converting the Session into a
    durable one;
  • invocation teardown cancels active turns, closes every owned handle, and
    retains no route, provider identity, or resumable session state; and
  • the same document, directory, and Session name in a later invocation start a
    new Devin conversation.

ACPX remains in persistent mode while the invocation is live. Its bookkeeping
for Devin is held in an invocation-local store rather than the durable ACPX
store. The host declares that lifetime before agent availability is probed, and
the provider keeps invocation-scoped and durable runtimes separated so one
cannot consult the other's store.

Lifetime is also part of a provider-issued Session's compatibility. Two agent
names may resolve to the same command while the host declares different
lifetimes for them. A Prompt cannot consume a Session placed under another
lifetime merely because their commands match; the mismatch refuses before any
additional store access, route, ensure, turn, or retained write. Two aliases
declared with the same lifetime continue to share the command-derived placement.

No title update, ACP session id, ACPX record id, or
cognition.ai/userMessageId is promoted into a durable identity.

Other agents keep their existing placement, materialization, retention,
ownership, and native-launch behavior.

Unsupported surfaces

xmd workflow, replay continuation that requires a new model turn, and
<Session.Launch> do not support Devin because each requires durable session
continuity. Each refuses before probing, starting, or otherwise contacting
Devin.

Plan authorship is a separate host surface and remains outside this Story,
whether reached through the xmd plan command or through <Plan> in an
ordinary document run. Both entrypoints refuse Devin before contacting it. An
explicit --session or <Plan session> additionally requests continuity that
an invocation-scoped Devin session cannot provide.

xmd run --journal remains usable because its journal is a trace of the current
run and is not reopened as continuation state.

Acceptance

  • xmd run --default-agent devin resolves the production command as
    devin acp.
  • Two sequential prompts in one Session use one live conversation and the
    second can act on context established by the first.
  • Two distinct Devin Sessions can have turns in flight concurrently, while two
    prompts for one Session remain ordered.
  • Cancelling a turn sends ACP cancellation and settles the turn as cancelled.
    Provider teardown attempts every handle even when another close fails.
  • The durable ACPX store receives no Devin record. A second provider invocation
    with the same cwd and Session names creates fresh backend conversations.
  • xmd workflow, the xmd plan command, <Plan> in an ordinary document run,
    and <Session.Launch> refuse Devin with zero doctor, ensure, turn, and
    native-process calls.
  • A mixed invocation cannot cross Devin's invocation-local records with a
    durable agent's records or runtime. Codex and Claude retain their current
    materialization behavior unchanged.
  • Two names resolving to one command but declaring opposite lifetimes cannot
    consume each other's Session in either direction and cause no additional
    store, route, ensure, turn, or retention effect. The same-lifetime alias case
    remains valid.
  • A credential-free black-box devin executable verifies the production argv,
    ACPX Windsurf client metadata and diagnostics exchange, same-invocation
    continuity, fresh later invocation, and absence of a durable record without
    credentials or model cost.
  • Architecture, ACP-client, plan-command, workflow-session, and executable-MDX
    evidence contracts describe this supported boundary and its refusals without
    claiming live-backend certification.

Evidence

Run the focused provider and host regressions explicitly:

deno task test packages/acp/tests/provider.test.ts
deno task test packages/cli/tests/agent-adapters.test.ts
deno task test packages/cli/tests/workflow-agent.test.ts
deno task test packages/cli/tests/plan-cli.test.ts
deno task test packages/cli/tests/plan-component.test.ts
deno task test packages/cli/tests/devin-agent.test.ts

The final command is the subprocess boundary: it runs a credential-free ACP
agent named devin through the production CLI and vendored ACPX shim.

Relationship

Closed issue #648 remains the durable first-turn materialization contract for
agents that publish its explicit acceptance signal. This issue does not weaken
or reinterpret that contract; it adds a host-declared invocation lifetime for
an agent that cannot satisfy it.

Issue #743 owns provider-neutral certification against real ACP-agent backends,
including the authorized Devin continuity, cancellation, teardown, and
sanitized-report requirements formerly included here. That cost-bearing
qualification does not delay this deterministic implementation.

Out of scope

  • Durable Devin sessions or cross-invocation resume.
  • Devin support in workflow continuation or any Plan-authorship surface.
  • Native Devin Session.Launch.
  • Inferring durable identity from display metadata or terminal response
    metadata.
  • Patching ACPX's vendored registry or adding an npm dependency merely to name
    devin acp.
  • Provider-state export, workflow-artifact portability, or conversation forking.
  • Live-backend certification, which belongs to Certify ACP agents against real backends through xmd run #743.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions

      , 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
       blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
      }
      } catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
      })();
      (function(){
      try {
      var __m = "github.com";
      var __re = new RegExp('^' + "github\\.com" + '
      
      Skip to content

      Add Devin Agent sessions to xmd run #740

      Description

      @taras

      Story

      As an executable-document author, I want to run Devin through the existing
      <Agent>, <Session>, and <Prompt> components, so one xmd run invocation
      can hold useful multi-turn Devin conversations without claiming that they can
      be resumed later.

      Example

      xmd run --default-agent devin review.md
      <Sessionname="review">
      <Prompt>Inspect the change and identify the highest-risk behavior.</Prompt>
      <Prompt>Turn that finding into a regression-test proposal.</Prompt>
      </Session>

      Both prompts reach the same live Devin conversation. Another named Session in
      the same invocation has its own conversation and may run concurrently.

      Current gap

      ACPX documents Devin as a raw devin acp command rather than a built-in agent.
      The current XMD registry therefore resolves devin incorrectly as the bare
      command. Even with the command corrected, XMD's ordinary ACP path waits for the
      durable first-turn materialization signal used by Codex and Claude. Devin emits
      neither that signal nor a provider-native session identity, so treating it as a
      durable session would either fail or retain an identity that nothing supports.

      The sanitized discovery traces establish the narrower usable protocol boundary:
      authentication, prompt streaming, normal completion, and ACP cancellation work
      through ACPX's Devin compatibility shim, but it publishes no durable acceptance
      or conversation identity. They inform this lifetime decision; reusable
      qualification against a live backend belongs to #743.

      Contract

      xmd run recognizes the agent name devin and launches devin acp. Devin
      Sessions are invocation-scoped:

      • prompts in one Session are serialized and continue one live ACP conversation;
      • different Sessions own different live conversations and may execute
        concurrently;
      • cancellation targets the active turn without converting the Session into a
        durable one;
      • invocation teardown cancels active turns, closes every owned handle, and
        retains no route, provider identity, or resumable session state; and
      • the same document, directory, and Session name in a later invocation start a
        new Devin conversation.

      ACPX remains in persistent mode while the invocation is live. Its bookkeeping
      for Devin is held in an invocation-local store rather than the durable ACPX
      store. The host declares that lifetime before agent availability is probed, and
      the provider keeps invocation-scoped and durable runtimes separated so one
      cannot consult the other's store.

      Lifetime is also part of a provider-issued Session's compatibility. Two agent
      names may resolve to the same command while the host declares different
      lifetimes for them. A Prompt cannot consume a Session placed under another
      lifetime merely because their commands match; the mismatch refuses before any
      additional store access, route, ensure, turn, or retained write. Two aliases
      declared with the same lifetime continue to share the command-derived placement.

      No title update, ACP session id, ACPX record id, or
      cognition.ai/userMessageId is promoted into a durable identity.

      Other agents keep their existing placement, materialization, retention,
      ownership, and native-launch behavior.

      Unsupported surfaces

      xmd workflow, replay continuation that requires a new model turn, and
      <Session.Launch> do not support Devin because each requires durable session
      continuity. Each refuses before probing, starting, or otherwise contacting
      Devin.

      Plan authorship is a separate host surface and remains outside this Story,
      whether reached through the xmd plan command or through <Plan> in an
      ordinary document run. Both entrypoints refuse Devin before contacting it. An
      explicit --session or <Plan session> additionally requests continuity that
      an invocation-scoped Devin session cannot provide.

      xmd run --journal remains usable because its journal is a trace of the current
      run and is not reopened as continuation state.

      Acceptance

      • xmd run --default-agent devin resolves the production command as
        devin acp.
      • Two sequential prompts in one Session use one live conversation and the
        second can act on context established by the first.
      • Two distinct Devin Sessions can have turns in flight concurrently, while two
        prompts for one Session remain ordered.
      • Cancelling a turn sends ACP cancellation and settles the turn as cancelled.
        Provider teardown attempts every handle even when another close fails.
      • The durable ACPX store receives no Devin record. A second provider invocation
        with the same cwd and Session names creates fresh backend conversations.
      • xmd workflow, the xmd plan command, <Plan> in an ordinary document run,
        and <Session.Launch> refuse Devin with zero doctor, ensure, turn, and
        native-process calls.
      • A mixed invocation cannot cross Devin's invocation-local records with a
        durable agent's records or runtime. Codex and Claude retain their current
        materialization behavior unchanged.
      • Two names resolving to one command but declaring opposite lifetimes cannot
        consume each other's Session in either direction and cause no additional
        store, route, ensure, turn, or retention effect. The same-lifetime alias case
        remains valid.
      • A credential-free black-box devin executable verifies the production argv,
        ACPX Windsurf client metadata and diagnostics exchange, same-invocation
        continuity, fresh later invocation, and absence of a durable record without
        credentials or model cost.
      • Architecture, ACP-client, plan-command, workflow-session, and executable-MDX
        evidence contracts describe this supported boundary and its refusals without
        claiming live-backend certification.

      Evidence

      Run the focused provider and host regressions explicitly:

      deno task test packages/acp/tests/provider.test.ts
      deno task test packages/cli/tests/agent-adapters.test.ts
      deno task test packages/cli/tests/workflow-agent.test.ts
      deno task test packages/cli/tests/plan-cli.test.ts
      deno task test packages/cli/tests/plan-component.test.ts
      deno task test packages/cli/tests/devin-agent.test.ts

      The final command is the subprocess boundary: it runs a credential-free ACP
      agent named devin through the production CLI and vendored ACPX shim.

      Relationship

      Closed issue #648 remains the durable first-turn materialization contract for
      agents that publish its explicit acceptance signal. This issue does not weaken
      or reinterpret that contract; it adds a host-declared invocation lifetime for
      an agent that cannot satisfy it.

      Issue #743 owns provider-neutral certification against real ACP-agent backends,
      including the authorized Devin continuity, cancellation, teardown, and
      sanitized-report requirements formerly included here. That cost-bearing
      qualification does not delay this deterministic implementation.

      Out of scope

      • Durable Devin sessions or cross-invocation resume.
      • Devin support in workflow continuation or any Plan-authorship surface.
      • Native Devin Session.Launch.
      • Inferring durable identity from display metadata or terminal response
        metadata.
      • Patching ACPX's vendored registry or adding an npm dependency merely to name
        devin acp.
      • Provider-state export, workflow-artifact portability, or conversation forking.
      • Live-backend certification, which belongs to Certify ACP agents against real backends through xmd run #743.

      Activity

      Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

      Metadata

      Metadata

      Assignees

      No one assigned

        Labels

        enhancementNew feature or request

        Projects

        No projects

          Milestone

          No milestone

          Relationships

          None yet

          Development

          No branches or pull requests

          Issue actions

          , 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
          Skip to content

          Add Devin Agent sessions to xmd run #740

          Description

          @taras

          Story

          As an executable-document author, I want to run Devin through the existing
          <Agent>, <Session>, and <Prompt> components, so one xmd run invocation
          can hold useful multi-turn Devin conversations without claiming that they can
          be resumed later.

          Example

          xmd run --default-agent devin review.md
          <Sessionname="review">
          <Prompt>Inspect the change and identify the highest-risk behavior.</Prompt>
          <Prompt>Turn that finding into a regression-test proposal.</Prompt>
          </Session>

          Both prompts reach the same live Devin conversation. Another named Session in
          the same invocation has its own conversation and may run concurrently.

          Current gap

          ACPX documents Devin as a raw devin acp command rather than a built-in agent.
          The current XMD registry therefore resolves devin incorrectly as the bare
          command. Even with the command corrected, XMD's ordinary ACP path waits for the
          durable first-turn materialization signal used by Codex and Claude. Devin emits
          neither that signal nor a provider-native session identity, so treating it as a
          durable session would either fail or retain an identity that nothing supports.

          The sanitized discovery traces establish the narrower usable protocol boundary:
          authentication, prompt streaming, normal completion, and ACP cancellation work
          through ACPX's Devin compatibility shim, but it publishes no durable acceptance
          or conversation identity. They inform this lifetime decision; reusable
          qualification against a live backend belongs to #743.

          Contract

          xmd run recognizes the agent name devin and launches devin acp. Devin
          Sessions are invocation-scoped:

          • prompts in one Session are serialized and continue one live ACP conversation;
          • different Sessions own different live conversations and may execute
            concurrently;
          • cancellation targets the active turn without converting the Session into a
            durable one;
          • invocation teardown cancels active turns, closes every owned handle, and
            retains no route, provider identity, or resumable session state; and
          • the same document, directory, and Session name in a later invocation start a
            new Devin conversation.

          ACPX remains in persistent mode while the invocation is live. Its bookkeeping
          for Devin is held in an invocation-local store rather than the durable ACPX
          store. The host declares that lifetime before agent availability is probed, and
          the provider keeps invocation-scoped and durable runtimes separated so one
          cannot consult the other's store.

          Lifetime is also part of a provider-issued Session's compatibility. Two agent
          names may resolve to the same command while the host declares different
          lifetimes for them. A Prompt cannot consume a Session placed under another
          lifetime merely because their commands match; the mismatch refuses before any
          additional store access, route, ensure, turn, or retained write. Two aliases
          declared with the same lifetime continue to share the command-derived placement.

          No title update, ACP session id, ACPX record id, or
          cognition.ai/userMessageId is promoted into a durable identity.

          Other agents keep their existing placement, materialization, retention,
          ownership, and native-launch behavior.

          Unsupported surfaces

          xmd workflow, replay continuation that requires a new model turn, and
          <Session.Launch> do not support Devin because each requires durable session
          continuity. Each refuses before probing, starting, or otherwise contacting
          Devin.

          Plan authorship is a separate host surface and remains outside this Story,
          whether reached through the xmd plan command or through <Plan> in an
          ordinary document run. Both entrypoints refuse Devin before contacting it. An
          explicit --session or <Plan session> additionally requests continuity that
          an invocation-scoped Devin session cannot provide.

          xmd run --journal remains usable because its journal is a trace of the current
          run and is not reopened as continuation state.

          Acceptance

          • xmd run --default-agent devin resolves the production command as
            devin acp.
          • Two sequential prompts in one Session use one live conversation and the
            second can act on context established by the first.
          • Two distinct Devin Sessions can have turns in flight concurrently, while two
            prompts for one Session remain ordered.
          • Cancelling a turn sends ACP cancellation and settles the turn as cancelled.
            Provider teardown attempts every handle even when another close fails.
          • The durable ACPX store receives no Devin record. A second provider invocation
            with the same cwd and Session names creates fresh backend conversations.
          • xmd workflow, the xmd plan command, <Plan> in an ordinary document run,
            and <Session.Launch> refuse Devin with zero doctor, ensure, turn, and
            native-process calls.
          • A mixed invocation cannot cross Devin's invocation-local records with a
            durable agent's records or runtime. Codex and Claude retain their current
            materialization behavior unchanged.
          • Two names resolving to one command but declaring opposite lifetimes cannot
            consume each other's Session in either direction and cause no additional
            store, route, ensure, turn, or retention effect. The same-lifetime alias case
            remains valid.
          • A credential-free black-box devin executable verifies the production argv,
            ACPX Windsurf client metadata and diagnostics exchange, same-invocation
            continuity, fresh later invocation, and absence of a durable record without
            credentials or model cost.
          • Architecture, ACP-client, plan-command, workflow-session, and executable-MDX
            evidence contracts describe this supported boundary and its refusals without
            claiming live-backend certification.

          Evidence

          Run the focused provider and host regressions explicitly:

          deno task test packages/acp/tests/provider.test.ts
          deno task test packages/cli/tests/agent-adapters.test.ts
          deno task test packages/cli/tests/workflow-agent.test.ts
          deno task test packages/cli/tests/plan-cli.test.ts
          deno task test packages/cli/tests/plan-component.test.ts
          deno task test packages/cli/tests/devin-agent.test.ts

          The final command is the subprocess boundary: it runs a credential-free ACP
          agent named devin through the production CLI and vendored ACPX shim.

          Relationship

          Closed issue #648 remains the durable first-turn materialization contract for
          agents that publish its explicit acceptance signal. This issue does not weaken
          or reinterpret that contract; it adds a host-declared invocation lifetime for
          an agent that cannot satisfy it.

          Issue #743 owns provider-neutral certification against real ACP-agent backends,
          including the authorized Devin continuity, cancellation, teardown, and
          sanitized-report requirements formerly included here. That cost-bearing
          qualification does not delay this deterministic implementation.

          Out of scope

          • Durable Devin sessions or cross-invocation resume.
          • Devin support in workflow continuation or any Plan-authorship surface.
          • Native Devin Session.Launch.
          • Inferring durable identity from display metadata or terminal response
            metadata.
          • Patching ACPX's vendored registry or adding an npm dependency merely to name
            devin acp.
          • Provider-state export, workflow-artifact portability, or conversation forking.
          • Live-backend certification, which belongs to Certify ACP agents against real backends through xmd run #743.

          Activity

          Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

          Metadata

          Metadata

          Assignees

          No one assigned

            Labels

            enhancementNew feature or request

            Projects

            No projects

              Milestone

              No milestone

              Relationships

              None yet

              Development

              No branches or pull requests

              Issue actions

              , 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
              Skip to content

              Add Devin Agent sessions to xmd run #740

              Description

              @taras

              Story

              As an executable-document author, I want to run Devin through the existing
              <Agent>, <Session>, and <Prompt> components, so one xmd run invocation
              can hold useful multi-turn Devin conversations without claiming that they can
              be resumed later.

              Example

              xmd run --default-agent devin review.md
              <Sessionname="review">
              <Prompt>Inspect the change and identify the highest-risk behavior.</Prompt>
              <Prompt>Turn that finding into a regression-test proposal.</Prompt>
              </Session>

              Both prompts reach the same live Devin conversation. Another named Session in
              the same invocation has its own conversation and may run concurrently.

              Current gap

              ACPX documents Devin as a raw devin acp command rather than a built-in agent.
              The current XMD registry therefore resolves devin incorrectly as the bare
              command. Even with the command corrected, XMD's ordinary ACP path waits for the
              durable first-turn materialization signal used by Codex and Claude. Devin emits
              neither that signal nor a provider-native session identity, so treating it as a
              durable session would either fail or retain an identity that nothing supports.

              The sanitized discovery traces establish the narrower usable protocol boundary:
              authentication, prompt streaming, normal completion, and ACP cancellation work
              through ACPX's Devin compatibility shim, but it publishes no durable acceptance
              or conversation identity. They inform this lifetime decision; reusable
              qualification against a live backend belongs to #743.

              Contract

              xmd run recognizes the agent name devin and launches devin acp. Devin
              Sessions are invocation-scoped:

              • prompts in one Session are serialized and continue one live ACP conversation;
              • different Sessions own different live conversations and may execute
                concurrently;
              • cancellation targets the active turn without converting the Session into a
                durable one;
              • invocation teardown cancels active turns, closes every owned handle, and
                retains no route, provider identity, or resumable session state; and
              • the same document, directory, and Session name in a later invocation start a
                new Devin conversation.

              ACPX remains in persistent mode while the invocation is live. Its bookkeeping
              for Devin is held in an invocation-local store rather than the durable ACPX
              store. The host declares that lifetime before agent availability is probed, and
              the provider keeps invocation-scoped and durable runtimes separated so one
              cannot consult the other's store.

              Lifetime is also part of a provider-issued Session's compatibility. Two agent
              names may resolve to the same command while the host declares different
              lifetimes for them. A Prompt cannot consume a Session placed under another
              lifetime merely because their commands match; the mismatch refuses before any
              additional store access, route, ensure, turn, or retained write. Two aliases
              declared with the same lifetime continue to share the command-derived placement.

              No title update, ACP session id, ACPX record id, or
              cognition.ai/userMessageId is promoted into a durable identity.

              Other agents keep their existing placement, materialization, retention,
              ownership, and native-launch behavior.

              Unsupported surfaces

              xmd workflow, replay continuation that requires a new model turn, and
              <Session.Launch> do not support Devin because each requires durable session
              continuity. Each refuses before probing, starting, or otherwise contacting
              Devin.

              Plan authorship is a separate host surface and remains outside this Story,
              whether reached through the xmd plan command or through <Plan> in an
              ordinary document run. Both entrypoints refuse Devin before contacting it. An
              explicit --session or <Plan session> additionally requests continuity that
              an invocation-scoped Devin session cannot provide.

              xmd run --journal remains usable because its journal is a trace of the current
              run and is not reopened as continuation state.

              Acceptance

              • xmd run --default-agent devin resolves the production command as
                devin acp.
              • Two sequential prompts in one Session use one live conversation and the
                second can act on context established by the first.
              • Two distinct Devin Sessions can have turns in flight concurrently, while two
                prompts for one Session remain ordered.
              • Cancelling a turn sends ACP cancellation and settles the turn as cancelled.
                Provider teardown attempts every handle even when another close fails.
              • The durable ACPX store receives no Devin record. A second provider invocation
                with the same cwd and Session names creates fresh backend conversations.
              • xmd workflow, the xmd plan command, <Plan> in an ordinary document run,
                and <Session.Launch> refuse Devin with zero doctor, ensure, turn, and
                native-process calls.
              • A mixed invocation cannot cross Devin's invocation-local records with a
                durable agent's records or runtime. Codex and Claude retain their current
                materialization behavior unchanged.
              • Two names resolving to one command but declaring opposite lifetimes cannot
                consume each other's Session in either direction and cause no additional
                store, route, ensure, turn, or retention effect. The same-lifetime alias case
                remains valid.
              • A credential-free black-box devin executable verifies the production argv,
                ACPX Windsurf client metadata and diagnostics exchange, same-invocation
                continuity, fresh later invocation, and absence of a durable record without
                credentials or model cost.
              • Architecture, ACP-client, plan-command, workflow-session, and executable-MDX
                evidence contracts describe this supported boundary and its refusals without
                claiming live-backend certification.

              Evidence

              Run the focused provider and host regressions explicitly:

              deno task test packages/acp/tests/provider.test.ts
              deno task test packages/cli/tests/agent-adapters.test.ts
              deno task test packages/cli/tests/workflow-agent.test.ts
              deno task test packages/cli/tests/plan-cli.test.ts
              deno task test packages/cli/tests/plan-component.test.ts
              deno task test packages/cli/tests/devin-agent.test.ts

              The final command is the subprocess boundary: it runs a credential-free ACP
              agent named devin through the production CLI and vendored ACPX shim.

              Relationship

              Closed issue #648 remains the durable first-turn materialization contract for
              agents that publish its explicit acceptance signal. This issue does not weaken
              or reinterpret that contract; it adds a host-declared invocation lifetime for
              an agent that cannot satisfy it.

              Issue #743 owns provider-neutral certification against real ACP-agent backends,
              including the authorized Devin continuity, cancellation, teardown, and
              sanitized-report requirements formerly included here. That cost-bearing
              qualification does not delay this deterministic implementation.

              Out of scope

              • Durable Devin sessions or cross-invocation resume.
              • Devin support in workflow continuation or any Plan-authorship surface.
              • Native Devin Session.Launch.
              • Inferring durable identity from display metadata or terminal response
                metadata.
              • Patching ACPX's vendored registry or adding an npm dependency merely to name
                devin acp.
              • Provider-state export, workflow-artifact portability, or conversation forking.
              • Live-backend certification, which belongs to Certify ACP agents against real backends through xmd run #743.

              Activity

              Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

              Metadata

              Metadata

              Assignees

              No one assigned

                Labels

                enhancementNew feature or request

                Projects

                No projects

                  Milestone

                  No milestone

                  Relationships

                  None yet

                  Development

                  No branches or pull requests

                  Issue actions

                  , 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
                  Skip to content

                  Add Devin Agent sessions to xmd run #740

                  Description

                  @taras

                  Story

                  As an executable-document author, I want to run Devin through the existing
                  <Agent>, <Session>, and <Prompt> components, so one xmd run invocation
                  can hold useful multi-turn Devin conversations without claiming that they can
                  be resumed later.

                  Example

                  xmd run --default-agent devin review.md
                  <Sessionname="review">
                  <Prompt>Inspect the change and identify the highest-risk behavior.</Prompt>
                  <Prompt>Turn that finding into a regression-test proposal.</Prompt>
                  </Session>

                  Both prompts reach the same live Devin conversation. Another named Session in
                  the same invocation has its own conversation and may run concurrently.

                  Current gap

                  ACPX documents Devin as a raw devin acp command rather than a built-in agent.
                  The current XMD registry therefore resolves devin incorrectly as the bare
                  command. Even with the command corrected, XMD's ordinary ACP path waits for the
                  durable first-turn materialization signal used by Codex and Claude. Devin emits
                  neither that signal nor a provider-native session identity, so treating it as a
                  durable session would either fail or retain an identity that nothing supports.

                  The sanitized discovery traces establish the narrower usable protocol boundary:
                  authentication, prompt streaming, normal completion, and ACP cancellation work
                  through ACPX's Devin compatibility shim, but it publishes no durable acceptance
                  or conversation identity. They inform this lifetime decision; reusable
                  qualification against a live backend belongs to #743.

                  Contract

                  xmd run recognizes the agent name devin and launches devin acp. Devin
                  Sessions are invocation-scoped:

                  • prompts in one Session are serialized and continue one live ACP conversation;
                  • different Sessions own different live conversations and may execute
                    concurrently;
                  • cancellation targets the active turn without converting the Session into a
                    durable one;
                  • invocation teardown cancels active turns, closes every owned handle, and
                    retains no route, provider identity, or resumable session state; and
                  • the same document, directory, and Session name in a later invocation start a
                    new Devin conversation.

                  ACPX remains in persistent mode while the invocation is live. Its bookkeeping
                  for Devin is held in an invocation-local store rather than the durable ACPX
                  store. The host declares that lifetime before agent availability is probed, and
                  the provider keeps invocation-scoped and durable runtimes separated so one
                  cannot consult the other's store.

                  Lifetime is also part of a provider-issued Session's compatibility. Two agent
                  names may resolve to the same command while the host declares different
                  lifetimes for them. A Prompt cannot consume a Session placed under another
                  lifetime merely because their commands match; the mismatch refuses before any
                  additional store access, route, ensure, turn, or retained write. Two aliases
                  declared with the same lifetime continue to share the command-derived placement.

                  No title update, ACP session id, ACPX record id, or
                  cognition.ai/userMessageId is promoted into a durable identity.

                  Other agents keep their existing placement, materialization, retention,
                  ownership, and native-launch behavior.

                  Unsupported surfaces

                  xmd workflow, replay continuation that requires a new model turn, and
                  <Session.Launch> do not support Devin because each requires durable session
                  continuity. Each refuses before probing, starting, or otherwise contacting
                  Devin.

                  Plan authorship is a separate host surface and remains outside this Story,
                  whether reached through the xmd plan command or through <Plan> in an
                  ordinary document run. Both entrypoints refuse Devin before contacting it. An
                  explicit --session or <Plan session> additionally requests continuity that
                  an invocation-scoped Devin session cannot provide.

                  xmd run --journal remains usable because its journal is a trace of the current
                  run and is not reopened as continuation state.

                  Acceptance

                  • xmd run --default-agent devin resolves the production command as
                    devin acp.
                  • Two sequential prompts in one Session use one live conversation and the
                    second can act on context established by the first.
                  • Two distinct Devin Sessions can have turns in flight concurrently, while two
                    prompts for one Session remain ordered.
                  • Cancelling a turn sends ACP cancellation and settles the turn as cancelled.
                    Provider teardown attempts every handle even when another close fails.
                  • The durable ACPX store receives no Devin record. A second provider invocation
                    with the same cwd and Session names creates fresh backend conversations.
                  • xmd workflow, the xmd plan command, <Plan> in an ordinary document run,
                    and <Session.Launch> refuse Devin with zero doctor, ensure, turn, and
                    native-process calls.
                  • A mixed invocation cannot cross Devin's invocation-local records with a
                    durable agent's records or runtime. Codex and Claude retain their current
                    materialization behavior unchanged.
                  • Two names resolving to one command but declaring opposite lifetimes cannot
                    consume each other's Session in either direction and cause no additional
                    store, route, ensure, turn, or retention effect. The same-lifetime alias case
                    remains valid.
                  • A credential-free black-box devin executable verifies the production argv,
                    ACPX Windsurf client metadata and diagnostics exchange, same-invocation
                    continuity, fresh later invocation, and absence of a durable record without
                    credentials or model cost.
                  • Architecture, ACP-client, plan-command, workflow-session, and executable-MDX
                    evidence contracts describe this supported boundary and its refusals without
                    claiming live-backend certification.

                  Evidence

                  Run the focused provider and host regressions explicitly:

                  deno task test packages/acp/tests/provider.test.ts
                  deno task test packages/cli/tests/agent-adapters.test.ts
                  deno task test packages/cli/tests/workflow-agent.test.ts
                  deno task test packages/cli/tests/plan-cli.test.ts
                  deno task test packages/cli/tests/plan-component.test.ts
                  deno task test packages/cli/tests/devin-agent.test.ts

                  The final command is the subprocess boundary: it runs a credential-free ACP
                  agent named devin through the production CLI and vendored ACPX shim.

                  Relationship

                  Closed issue #648 remains the durable first-turn materialization contract for
                  agents that publish its explicit acceptance signal. This issue does not weaken
                  or reinterpret that contract; it adds a host-declared invocation lifetime for
                  an agent that cannot satisfy it.

                  Issue #743 owns provider-neutral certification against real ACP-agent backends,
                  including the authorized Devin continuity, cancellation, teardown, and
                  sanitized-report requirements formerly included here. That cost-bearing
                  qualification does not delay this deterministic implementation.

                  Out of scope

                  • Durable Devin sessions or cross-invocation resume.
                  • Devin support in workflow continuation or any Plan-authorship surface.
                  • Native Devin Session.Launch.
                  • Inferring durable identity from display metadata or terminal response
                    metadata.
                  • Patching ACPX's vendored registry or adding an npm dependency merely to name
                    devin acp.
                  • Provider-state export, workflow-artifact portability, or conversation forking.
                  • Live-backend certification, which belongs to Certify ACP agents against real backends through xmd run #743.

                  Activity

                  Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

                  Metadata

                  Metadata

                  Assignees

                  No one assigned

                    Labels

                    enhancementNew feature or request

                    Projects

                    No projects

                      Milestone

                      No milestone

                      Relationships

                      None yet

                      Development

                      No branches or pull requests

                      Issue actions

                      , 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
                      Skip to content

                      Add Devin Agent sessions to xmd run #740

                      Description

                      @taras

                      Story

                      As an executable-document author, I want to run Devin through the existing
                      <Agent>, <Session>, and <Prompt> components, so one xmd run invocation
                      can hold useful multi-turn Devin conversations without claiming that they can
                      be resumed later.

                      Example

                      xmd run --default-agent devin review.md
                      <Sessionname="review">
                      <Prompt>Inspect the change and identify the highest-risk behavior.</Prompt>
                      <Prompt>Turn that finding into a regression-test proposal.</Prompt>
                      </Session>

                      Both prompts reach the same live Devin conversation. Another named Session in
                      the same invocation has its own conversation and may run concurrently.

                      Current gap

                      ACPX documents Devin as a raw devin acp command rather than a built-in agent.
                      The current XMD registry therefore resolves devin incorrectly as the bare
                      command. Even with the command corrected, XMD's ordinary ACP path waits for the
                      durable first-turn materialization signal used by Codex and Claude. Devin emits
                      neither that signal nor a provider-native session identity, so treating it as a
                      durable session would either fail or retain an identity that nothing supports.

                      The sanitized discovery traces establish the narrower usable protocol boundary:
                      authentication, prompt streaming, normal completion, and ACP cancellation work
                      through ACPX's Devin compatibility shim, but it publishes no durable acceptance
                      or conversation identity. They inform this lifetime decision; reusable
                      qualification against a live backend belongs to #743.

                      Contract

                      xmd run recognizes the agent name devin and launches devin acp. Devin
                      Sessions are invocation-scoped:

                      • prompts in one Session are serialized and continue one live ACP conversation;
                      • different Sessions own different live conversations and may execute
                        concurrently;
                      • cancellation targets the active turn without converting the Session into a
                        durable one;
                      • invocation teardown cancels active turns, closes every owned handle, and
                        retains no route, provider identity, or resumable session state; and
                      • the same document, directory, and Session name in a later invocation start a
                        new Devin conversation.

                      ACPX remains in persistent mode while the invocation is live. Its bookkeeping
                      for Devin is held in an invocation-local store rather than the durable ACPX
                      store. The host declares that lifetime before agent availability is probed, and
                      the provider keeps invocation-scoped and durable runtimes separated so one
                      cannot consult the other's store.

                      Lifetime is also part of a provider-issued Session's compatibility. Two agent
                      names may resolve to the same command while the host declares different
                      lifetimes for them. A Prompt cannot consume a Session placed under another
                      lifetime merely because their commands match; the mismatch refuses before any
                      additional store access, route, ensure, turn, or retained write. Two aliases
                      declared with the same lifetime continue to share the command-derived placement.

                      No title update, ACP session id, ACPX record id, or
                      cognition.ai/userMessageId is promoted into a durable identity.

                      Other agents keep their existing placement, materialization, retention,
                      ownership, and native-launch behavior.

                      Unsupported surfaces

                      xmd workflow, replay continuation that requires a new model turn, and
                      <Session.Launch> do not support Devin because each requires durable session
                      continuity. Each refuses before probing, starting, or otherwise contacting
                      Devin.

                      Plan authorship is a separate host surface and remains outside this Story,
                      whether reached through the xmd plan command or through <Plan> in an
                      ordinary document run. Both entrypoints refuse Devin before contacting it. An
                      explicit --session or <Plan session> additionally requests continuity that
                      an invocation-scoped Devin session cannot provide.

                      xmd run --journal remains usable because its journal is a trace of the current
                      run and is not reopened as continuation state.

                      Acceptance

                      • xmd run --default-agent devin resolves the production command as
                        devin acp.
                      • Two sequential prompts in one Session use one live conversation and the
                        second can act on context established by the first.
                      • Two distinct Devin Sessions can have turns in flight concurrently, while two
                        prompts for one Session remain ordered.
                      • Cancelling a turn sends ACP cancellation and settles the turn as cancelled.
                        Provider teardown attempts every handle even when another close fails.
                      • The durable ACPX store receives no Devin record. A second provider invocation
                        with the same cwd and Session names creates fresh backend conversations.
                      • xmd workflow, the xmd plan command, <Plan> in an ordinary document run,
                        and <Session.Launch> refuse Devin with zero doctor, ensure, turn, and
                        native-process calls.
                      • A mixed invocation cannot cross Devin's invocation-local records with a
                        durable agent's records or runtime. Codex and Claude retain their current
                        materialization behavior unchanged.
                      • Two names resolving to one command but declaring opposite lifetimes cannot
                        consume each other's Session in either direction and cause no additional
                        store, route, ensure, turn, or retention effect. The same-lifetime alias case
                        remains valid.
                      • A credential-free black-box devin executable verifies the production argv,
                        ACPX Windsurf client metadata and diagnostics exchange, same-invocation
                        continuity, fresh later invocation, and absence of a durable record without
                        credentials or model cost.
                      • Architecture, ACP-client, plan-command, workflow-session, and executable-MDX
                        evidence contracts describe this supported boundary and its refusals without
                        claiming live-backend certification.

                      Evidence

                      Run the focused provider and host regressions explicitly:

                      deno task test packages/acp/tests/provider.test.ts
                      deno task test packages/cli/tests/agent-adapters.test.ts
                      deno task test packages/cli/tests/workflow-agent.test.ts
                      deno task test packages/cli/tests/plan-cli.test.ts
                      deno task test packages/cli/tests/plan-component.test.ts
                      deno task test packages/cli/tests/devin-agent.test.ts

                      The final command is the subprocess boundary: it runs a credential-free ACP
                      agent named devin through the production CLI and vendored ACPX shim.

                      Relationship

                      Closed issue #648 remains the durable first-turn materialization contract for
                      agents that publish its explicit acceptance signal. This issue does not weaken
                      or reinterpret that contract; it adds a host-declared invocation lifetime for
                      an agent that cannot satisfy it.

                      Issue #743 owns provider-neutral certification against real ACP-agent backends,
                      including the authorized Devin continuity, cancellation, teardown, and
                      sanitized-report requirements formerly included here. That cost-bearing
                      qualification does not delay this deterministic implementation.

                      Out of scope

                      • Durable Devin sessions or cross-invocation resume.
                      • Devin support in workflow continuation or any Plan-authorship surface.
                      • Native Devin Session.Launch.
                      • Inferring durable identity from display metadata or terminal response
                        metadata.
                      • Patching ACPX's vendored registry or adding an npm dependency merely to name
                        devin acp.
                      • Provider-state export, workflow-artifact portability, or conversation forking.
                      • Live-backend certification, which belongs to Certify ACP agents against real backends through xmd run #743.

                      Activity

                      Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

                      Metadata

                      Metadata

                      Assignees

                      No one assigned

                        Labels

                        enhancementNew feature or request

                        Projects

                        No projects

                          Milestone

                          No milestone

                          Relationships

                          None yet

                          Development

                          No branches or pull requests

                          Issue actions

                          , 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
                          Skip to content

                          Add Devin Agent sessions to xmd run #740

                          Description

                          @taras

                          Story

                          As an executable-document author, I want to run Devin through the existing
                          <Agent>, <Session>, and <Prompt> components, so one xmd run invocation
                          can hold useful multi-turn Devin conversations without claiming that they can
                          be resumed later.

                          Example

                          xmd run --default-agent devin review.md
                          <Sessionname="review">
                          <Prompt>Inspect the change and identify the highest-risk behavior.</Prompt>
                          <Prompt>Turn that finding into a regression-test proposal.</Prompt>
                          </Session>

                          Both prompts reach the same live Devin conversation. Another named Session in
                          the same invocation has its own conversation and may run concurrently.

                          Current gap

                          ACPX documents Devin as a raw devin acp command rather than a built-in agent.
                          The current XMD registry therefore resolves devin incorrectly as the bare
                          command. Even with the command corrected, XMD's ordinary ACP path waits for the
                          durable first-turn materialization signal used by Codex and Claude. Devin emits
                          neither that signal nor a provider-native session identity, so treating it as a
                          durable session would either fail or retain an identity that nothing supports.

                          The sanitized discovery traces establish the narrower usable protocol boundary:
                          authentication, prompt streaming, normal completion, and ACP cancellation work
                          through ACPX's Devin compatibility shim, but it publishes no durable acceptance
                          or conversation identity. They inform this lifetime decision; reusable
                          qualification against a live backend belongs to #743.

                          Contract

                          xmd run recognizes the agent name devin and launches devin acp. Devin
                          Sessions are invocation-scoped:

                          • prompts in one Session are serialized and continue one live ACP conversation;
                          • different Sessions own different live conversations and may execute
                            concurrently;
                          • cancellation targets the active turn without converting the Session into a
                            durable one;
                          • invocation teardown cancels active turns, closes every owned handle, and
                            retains no route, provider identity, or resumable session state; and
                          • the same document, directory, and Session name in a later invocation start a
                            new Devin conversation.

                          ACPX remains in persistent mode while the invocation is live. Its bookkeeping
                          for Devin is held in an invocation-local store rather than the durable ACPX
                          store. The host declares that lifetime before agent availability is probed, and
                          the provider keeps invocation-scoped and durable runtimes separated so one
                          cannot consult the other's store.

                          Lifetime is also part of a provider-issued Session's compatibility. Two agent
                          names may resolve to the same command while the host declares different
                          lifetimes for them. A Prompt cannot consume a Session placed under another
                          lifetime merely because their commands match; the mismatch refuses before any
                          additional store access, route, ensure, turn, or retained write. Two aliases
                          declared with the same lifetime continue to share the command-derived placement.

                          No title update, ACP session id, ACPX record id, or
                          cognition.ai/userMessageId is promoted into a durable identity.

                          Other agents keep their existing placement, materialization, retention,
                          ownership, and native-launch behavior.

                          Unsupported surfaces

                          xmd workflow, replay continuation that requires a new model turn, and
                          <Session.Launch> do not support Devin because each requires durable session
                          continuity. Each refuses before probing, starting, or otherwise contacting
                          Devin.

                          Plan authorship is a separate host surface and remains outside this Story,
                          whether reached through the xmd plan command or through <Plan> in an
                          ordinary document run. Both entrypoints refuse Devin before contacting it. An
                          explicit --session or <Plan session> additionally requests continuity that
                          an invocation-scoped Devin session cannot provide.

                          xmd run --journal remains usable because its journal is a trace of the current
                          run and is not reopened as continuation state.

                          Acceptance

                          • xmd run --default-agent devin resolves the production command as
                            devin acp.
                          • Two sequential prompts in one Session use one live conversation and the
                            second can act on context established by the first.
                          • Two distinct Devin Sessions can have turns in flight concurrently, while two
                            prompts for one Session remain ordered.
                          • Cancelling a turn sends ACP cancellation and settles the turn as cancelled.
                            Provider teardown attempts every handle even when another close fails.
                          • The durable ACPX store receives no Devin record. A second provider invocation
                            with the same cwd and Session names creates fresh backend conversations.
                          • xmd workflow, the xmd plan command, <Plan> in an ordinary document run,
                            and <Session.Launch> refuse Devin with zero doctor, ensure, turn, and
                            native-process calls.
                          • A mixed invocation cannot cross Devin's invocation-local records with a
                            durable agent's records or runtime. Codex and Claude retain their current
                            materialization behavior unchanged.
                          • Two names resolving to one command but declaring opposite lifetimes cannot
                            consume each other's Session in either direction and cause no additional
                            store, route, ensure, turn, or retention effect. The same-lifetime alias case
                            remains valid.
                          • A credential-free black-box devin executable verifies the production argv,
                            ACPX Windsurf client metadata and diagnostics exchange, same-invocation
                            continuity, fresh later invocation, and absence of a durable record without
                            credentials or model cost.
                          • Architecture, ACP-client, plan-command, workflow-session, and executable-MDX
                            evidence contracts describe this supported boundary and its refusals without
                            claiming live-backend certification.

                          Evidence

                          Run the focused provider and host regressions explicitly:

                          deno task test packages/acp/tests/provider.test.ts
                          deno task test packages/cli/tests/agent-adapters.test.ts
                          deno task test packages/cli/tests/workflow-agent.test.ts
                          deno task test packages/cli/tests/plan-cli.test.ts
                          deno task test packages/cli/tests/plan-component.test.ts
                          deno task test packages/cli/tests/devin-agent.test.ts

                          The final command is the subprocess boundary: it runs a credential-free ACP
                          agent named devin through the production CLI and vendored ACPX shim.

                          Relationship

                          Closed issue #648 remains the durable first-turn materialization contract for
                          agents that publish its explicit acceptance signal. This issue does not weaken
                          or reinterpret that contract; it adds a host-declared invocation lifetime for
                          an agent that cannot satisfy it.

                          Issue #743 owns provider-neutral certification against real ACP-agent backends,
                          including the authorized Devin continuity, cancellation, teardown, and
                          sanitized-report requirements formerly included here. That cost-bearing
                          qualification does not delay this deterministic implementation.

                          Out of scope

                          • Durable Devin sessions or cross-invocation resume.
                          • Devin support in workflow continuation or any Plan-authorship surface.
                          • Native Devin Session.Launch.
                          • Inferring durable identity from display metadata or terminal response
                            metadata.
                          • Patching ACPX's vendored registry or adding an npm dependency merely to name
                            devin acp.
                          • Provider-state export, workflow-artifact portability, or conversation forking.
                          • Live-backend certification, which belongs to Certify ACP agents against real backends through xmd run #743.

                          Activity

                          Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

                          Metadata

                          Metadata

                          Assignees

                          No one assigned

                            Labels

                            enhancementNew feature or request

                            Projects

                            No projects

                              Milestone

                              No milestone

                              Relationships

                              None yet

                              Development

                              No branches or pull requests

                              Issue actions

                              , 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
                              Skip to content

                              Add Devin Agent sessions to xmd run #740

                              Description

                              @taras

                              Story

                              As an executable-document author, I want to run Devin through the existing
                              <Agent>, <Session>, and <Prompt> components, so one xmd run invocation
                              can hold useful multi-turn Devin conversations without claiming that they can
                              be resumed later.

                              Example

                              xmd run --default-agent devin review.md
                              <Sessionname="review">
                              <Prompt>Inspect the change and identify the highest-risk behavior.</Prompt>
                              <Prompt>Turn that finding into a regression-test proposal.</Prompt>
                              </Session>

                              Both prompts reach the same live Devin conversation. Another named Session in
                              the same invocation has its own conversation and may run concurrently.

                              Current gap

                              ACPX documents Devin as a raw devin acp command rather than a built-in agent.
                              The current XMD registry therefore resolves devin incorrectly as the bare
                              command. Even with the command corrected, XMD's ordinary ACP path waits for the
                              durable first-turn materialization signal used by Codex and Claude. Devin emits
                              neither that signal nor a provider-native session identity, so treating it as a
                              durable session would either fail or retain an identity that nothing supports.

                              The sanitized discovery traces establish the narrower usable protocol boundary:
                              authentication, prompt streaming, normal completion, and ACP cancellation work
                              through ACPX's Devin compatibility shim, but it publishes no durable acceptance
                              or conversation identity. They inform this lifetime decision; reusable
                              qualification against a live backend belongs to #743.

                              Contract

                              xmd run recognizes the agent name devin and launches devin acp. Devin
                              Sessions are invocation-scoped:

                              • prompts in one Session are serialized and continue one live ACP conversation;
                              • different Sessions own different live conversations and may execute
                                concurrently;
                              • cancellation targets the active turn without converting the Session into a
                                durable one;
                              • invocation teardown cancels active turns, closes every owned handle, and
                                retains no route, provider identity, or resumable session state; and
                              • the same document, directory, and Session name in a later invocation start a
                                new Devin conversation.

                              ACPX remains in persistent mode while the invocation is live. Its bookkeeping
                              for Devin is held in an invocation-local store rather than the durable ACPX
                              store. The host declares that lifetime before agent availability is probed, and
                              the provider keeps invocation-scoped and durable runtimes separated so one
                              cannot consult the other's store.

                              Lifetime is also part of a provider-issued Session's compatibility. Two agent
                              names may resolve to the same command while the host declares different
                              lifetimes for them. A Prompt cannot consume a Session placed under another
                              lifetime merely because their commands match; the mismatch refuses before any
                              additional store access, route, ensure, turn, or retained write. Two aliases
                              declared with the same lifetime continue to share the command-derived placement.

                              No title update, ACP session id, ACPX record id, or
                              cognition.ai/userMessageId is promoted into a durable identity.

                              Other agents keep their existing placement, materialization, retention,
                              ownership, and native-launch behavior.

                              Unsupported surfaces

                              xmd workflow, replay continuation that requires a new model turn, and
                              <Session.Launch> do not support Devin because each requires durable session
                              continuity. Each refuses before probing, starting, or otherwise contacting
                              Devin.

                              Plan authorship is a separate host surface and remains outside this Story,
                              whether reached through the xmd plan command or through <Plan> in an
                              ordinary document run. Both entrypoints refuse Devin before contacting it. An
                              explicit --session or <Plan session> additionally requests continuity that
                              an invocation-scoped Devin session cannot provide.

                              xmd run --journal remains usable because its journal is a trace of the current
                              run and is not reopened as continuation state.

                              Acceptance

                              • xmd run --default-agent devin resolves the production command as
                                devin acp.
                              • Two sequential prompts in one Session use one live conversation and the
                                second can act on context established by the first.
                              • Two distinct Devin Sessions can have turns in flight concurrently, while two
                                prompts for one Session remain ordered.
                              • Cancelling a turn sends ACP cancellation and settles the turn as cancelled.
                                Provider teardown attempts every handle even when another close fails.
                              • The durable ACPX store receives no Devin record. A second provider invocation
                                with the same cwd and Session names creates fresh backend conversations.
                              • xmd workflow, the xmd plan command, <Plan> in an ordinary document run,
                                and <Session.Launch> refuse Devin with zero doctor, ensure, turn, and
                                native-process calls.
                              • A mixed invocation cannot cross Devin's invocation-local records with a
                                durable agent's records or runtime. Codex and Claude retain their current
                                materialization behavior unchanged.
                              • Two names resolving to one command but declaring opposite lifetimes cannot
                                consume each other's Session in either direction and cause no additional
                                store, route, ensure, turn, or retention effect. The same-lifetime alias case
                                remains valid.
                              • A credential-free black-box devin executable verifies the production argv,
                                ACPX Windsurf client metadata and diagnostics exchange, same-invocation
                                continuity, fresh later invocation, and absence of a durable record without
                                credentials or model cost.
                              • Architecture, ACP-client, plan-command, workflow-session, and executable-MDX
                                evidence contracts describe this supported boundary and its refusals without
                                claiming live-backend certification.

                              Evidence

                              Run the focused provider and host regressions explicitly:

                              deno task test packages/acp/tests/provider.test.ts
                              deno task test packages/cli/tests/agent-adapters.test.ts
                              deno task test packages/cli/tests/workflow-agent.test.ts
                              deno task test packages/cli/tests/plan-cli.test.ts
                              deno task test packages/cli/tests/plan-component.test.ts
                              deno task test packages/cli/tests/devin-agent.test.ts

                              The final command is the subprocess boundary: it runs a credential-free ACP
                              agent named devin through the production CLI and vendored ACPX shim.

                              Relationship

                              Closed issue #648 remains the durable first-turn materialization contract for
                              agents that publish its explicit acceptance signal. This issue does not weaken
                              or reinterpret that contract; it adds a host-declared invocation lifetime for
                              an agent that cannot satisfy it.

                              Issue #743 owns provider-neutral certification against real ACP-agent backends,
                              including the authorized Devin continuity, cancellation, teardown, and
                              sanitized-report requirements formerly included here. That cost-bearing
                              qualification does not delay this deterministic implementation.

                              Out of scope

                              • Durable Devin sessions or cross-invocation resume.
                              • Devin support in workflow continuation or any Plan-authorship surface.
                              • Native Devin Session.Launch.
                              • Inferring durable identity from display metadata or terminal response
                                metadata.
                              • Patching ACPX's vendored registry or adding an npm dependency merely to name
                                devin acp.
                              • Provider-state export, workflow-artifact portability, or conversation forking.
                              • Live-backend certification, which belongs to Certify ACP agents against real backends through xmd run #743.

                              Activity

                              Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

                              Metadata

                              Metadata

                              Assignees

                              No one assigned

                                Labels

                                enhancementNew feature or request

                                Projects

                                No projects

                                  Milestone

                                  No milestone

                                  Relationships

                                  None yet

                                  Development

                                  No branches or pull requests

                                  Issue actions