Launch native Agent sessions in independent terminal panes #731

Description

@taras

Story

As an executable-document author, I want native Agent sessions in different
terminal panes to remain interactive at the same time, so a terminal grid can
host independent Implementor, Planner, Architect, or reviewer sessions without
weakening their existing continuity and ownership guarantees.

This is the native Agent integration Story under #717. It composes the
provider-neutral pane authority from #730 with the native launch contract from
#517. It does not implement tmux or advertise another Agent provider.

Contract

At the root, <Session.Launch> keeps its current behavior: it takes the
document execution's foreground-terminal lease and hands the inherited terminal
to one native UI. Inside a paired <Terminal>, core installs a pane-scoped
native launcher that closes over that pane's private claim and readiness latch.
<Session.Launch> uses the launcher already in scope; it receives no pane prop,
token, identifier, or mode, and its public launch request and durable result do
not change.

The pane launcher validates the exact claim through the host terminal authority,
reserves only that pane, flushes that pane, and starts the provider's exact
native launch request there. Launches in distinct panes may own their terminals
concurrently. A second live launch in the same pane refuses. Sequential launches
in one pane are admitted only after the previous child, its observable
descendants and process-group members, and every other holder of that pane
terminal are gone.

Pane ownership and Agent-session ownership remain independent. The existing
session coordinator keeps the natural provider, Agent, and logical-session key.
Two panes naming one logical session still contend without waiting; one pane's
terminal claim cannot ensure, create, resume, detach, prompt, attach to, or
otherwise authorize an Agent session. Distinct sessions may be owned
concurrently.

The launch acknowledges pane readiness only from the native child's successful
runtime spawn event and before waiting for exit. Session preparation, route
publication, private instruction-file creation, ACP detach, PID allocation, and
first output are not readiness. A failed spawn leaves any already-completed
durable launch phases intact and participates in the grid's hidden startup
teardown.

After attachment, a native UI's independent nonzero exit fails its pane flow and
does not cancel siblings. Reader close cancels a still-live launch through the
ordinary launch path, awaits native child teardown and Agent-session quiescence,
and does not turn that cancellation into another pane failure. Parent
cancellation remains cancellation.

All existing #517 rules remain true: prepared instructions are not a Prompt or
transcript, ACP and the native UI never own one session concurrently,
construction routes remain create-once, executable binding and provider-native
identity remain exact, and completed replay launches nothing. An incomplete
launch inside a pane preserves its existing prepared/detached identity and
never substitutes another conversation.

Acceptance

  • A checked-in executable Markdown journey uses a controlled provider to start
    at least two distinct native Agent sessions in different panes before the grid
    attaches; both remain concurrently interactive.
  • A root launch still takes the root foreground lease. A grid and root launch
    cannot overlap, while two pane launches in distinct panes do not contend for
    terminal ownership.
  • Two overlapping launches in one pane refuse. A sequential launch is admitted
    only after the prior pane terminal is proven quiescent.
  • Two panes naming one logical Agent session still contend through the existing
    non-waiting coordinator. Distinct sessions acquire distinct ownership without
    any pane-derived key or authority.
  • The pane readiness latch is acknowledged only by the runtime spawn event. A
    launch failure before spawn prevents grid attachment without rolling back
    earlier durable Agent preparation.
  • Exact argv, cwd, environment, provider-native identity, construction route,
    instruction layer, executable binding, and durable launch phases are the same
    values the root launch would use; no provider layout identity enters them.
  • One pane's native exit becomes only that pane's status. Grid close cancels
    live launches, awaits native process teardown and session quiescence, and lets
    the document continue only afterwards.
  • Completed grid replay contacts no Agent provider, coordinator, or native
    launcher. Partial replay of a launch retains the existing Launch a deterministically prepared Agent session in its native UI #517 identity and
    reconciliation behavior.
  • TestAgent proves the journey without starting Claude, Codex, or a model. The
    grid adds no native-launch advertisement, and an unadvertised Agent still
    refuses before session ownership moves.

This Story owns TG5 and the Agent-session and native-launch portions of TG11,
plus native-session-launch checklist items 24–27. It reuses #730's lifecycle and
does not duplicate its generic provider, shell, or replay tests.

Focused evidence

Extend the existing native-launch layers and add one authored grid journey:

deno task test packages/core/tests/agent-session-launch.test.ts
deno task test packages/runtime/tests/native-launcher.test.ts
deno task test packages/test-agent/tests/native-launch.test.ts
deno task test packages/test-agent/tests/terminal-grid-native-launch.test.ts

The authored journey belongs beside the TestAgent native-session launch
documents and uses controlled start, exit, contention, cancellation, and
quiescence signals. No real Agent CLI is delivery evidence for this Story.

Dependencies and exclusions

Verification stack

This Story is the fourth layer of #717's linear verification stack.

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

      Launch native Agent sessions in independent terminal panes #731

      Description

      @taras

      Story

      As an executable-document author, I want native Agent sessions in different
      terminal panes to remain interactive at the same time, so a terminal grid can
      host independent Implementor, Planner, Architect, or reviewer sessions without
      weakening their existing continuity and ownership guarantees.

      This is the native Agent integration Story under #717. It composes the
      provider-neutral pane authority from #730 with the native launch contract from
      #517. It does not implement tmux or advertise another Agent provider.

      Contract

      At the root, <Session.Launch> keeps its current behavior: it takes the
      document execution's foreground-terminal lease and hands the inherited terminal
      to one native UI. Inside a paired <Terminal>, core installs a pane-scoped
      native launcher that closes over that pane's private claim and readiness latch.
      <Session.Launch> uses the launcher already in scope; it receives no pane prop,
      token, identifier, or mode, and its public launch request and durable result do
      not change.

      The pane launcher validates the exact claim through the host terminal authority,
      reserves only that pane, flushes that pane, and starts the provider's exact
      native launch request there. Launches in distinct panes may own their terminals
      concurrently. A second live launch in the same pane refuses. Sequential launches
      in one pane are admitted only after the previous child, its observable
      descendants and process-group members, and every other holder of that pane
      terminal are gone.

      Pane ownership and Agent-session ownership remain independent. The existing
      session coordinator keeps the natural provider, Agent, and logical-session key.
      Two panes naming one logical session still contend without waiting; one pane's
      terminal claim cannot ensure, create, resume, detach, prompt, attach to, or
      otherwise authorize an Agent session. Distinct sessions may be owned
      concurrently.

      The launch acknowledges pane readiness only from the native child's successful
      runtime spawn event and before waiting for exit. Session preparation, route
      publication, private instruction-file creation, ACP detach, PID allocation, and
      first output are not readiness. A failed spawn leaves any already-completed
      durable launch phases intact and participates in the grid's hidden startup
      teardown.

      After attachment, a native UI's independent nonzero exit fails its pane flow and
      does not cancel siblings. Reader close cancels a still-live launch through the
      ordinary launch path, awaits native child teardown and Agent-session quiescence,
      and does not turn that cancellation into another pane failure. Parent
      cancellation remains cancellation.

      All existing #517 rules remain true: prepared instructions are not a Prompt or
      transcript, ACP and the native UI never own one session concurrently,
      construction routes remain create-once, executable binding and provider-native
      identity remain exact, and completed replay launches nothing. An incomplete
      launch inside a pane preserves its existing prepared/detached identity and
      never substitutes another conversation.

      Acceptance

      • A checked-in executable Markdown journey uses a controlled provider to start
        at least two distinct native Agent sessions in different panes before the grid
        attaches; both remain concurrently interactive.
      • A root launch still takes the root foreground lease. A grid and root launch
        cannot overlap, while two pane launches in distinct panes do not contend for
        terminal ownership.
      • Two overlapping launches in one pane refuse. A sequential launch is admitted
        only after the prior pane terminal is proven quiescent.
      • Two panes naming one logical Agent session still contend through the existing
        non-waiting coordinator. Distinct sessions acquire distinct ownership without
        any pane-derived key or authority.
      • The pane readiness latch is acknowledged only by the runtime spawn event. A
        launch failure before spawn prevents grid attachment without rolling back
        earlier durable Agent preparation.
      • Exact argv, cwd, environment, provider-native identity, construction route,
        instruction layer, executable binding, and durable launch phases are the same
        values the root launch would use; no provider layout identity enters them.
      • One pane's native exit becomes only that pane's status. Grid close cancels
        live launches, awaits native process teardown and session quiescence, and lets
        the document continue only afterwards.
      • Completed grid replay contacts no Agent provider, coordinator, or native
        launcher. Partial replay of a launch retains the existing Launch a deterministically prepared Agent session in its native UI #517 identity and
        reconciliation behavior.
      • TestAgent proves the journey without starting Claude, Codex, or a model. The
        grid adds no native-launch advertisement, and an unadvertised Agent still
        refuses before session ownership moves.

      This Story owns TG5 and the Agent-session and native-launch portions of TG11,
      plus native-session-launch checklist items 24–27. It reuses #730's lifecycle and
      does not duplicate its generic provider, shell, or replay tests.

      Focused evidence

      Extend the existing native-launch layers and add one authored grid journey:

      deno task test packages/core/tests/agent-session-launch.test.ts
      deno task test packages/runtime/tests/native-launcher.test.ts
      deno task test packages/test-agent/tests/native-launch.test.ts
      deno task test packages/test-agent/tests/terminal-grid-native-launch.test.ts

      The authored journey belongs beside the TestAgent native-session launch
      documents and uses controlled start, exit, contention, cancellation, and
      quiescence signals. No real Agent CLI is delivery evidence for this Story.

      Dependencies and exclusions

      Verification stack

      This Story is the fourth layer of #717's linear verification stack.

      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

          Launch native Agent sessions in independent terminal panes #731

          Description

          @taras

          Story

          As an executable-document author, I want native Agent sessions in different
          terminal panes to remain interactive at the same time, so a terminal grid can
          host independent Implementor, Planner, Architect, or reviewer sessions without
          weakening their existing continuity and ownership guarantees.

          This is the native Agent integration Story under #717. It composes the
          provider-neutral pane authority from #730 with the native launch contract from
          #517. It does not implement tmux or advertise another Agent provider.

          Contract

          At the root, <Session.Launch> keeps its current behavior: it takes the
          document execution's foreground-terminal lease and hands the inherited terminal
          to one native UI. Inside a paired <Terminal>, core installs a pane-scoped
          native launcher that closes over that pane's private claim and readiness latch.
          <Session.Launch> uses the launcher already in scope; it receives no pane prop,
          token, identifier, or mode, and its public launch request and durable result do
          not change.

          The pane launcher validates the exact claim through the host terminal authority,
          reserves only that pane, flushes that pane, and starts the provider's exact
          native launch request there. Launches in distinct panes may own their terminals
          concurrently. A second live launch in the same pane refuses. Sequential launches
          in one pane are admitted only after the previous child, its observable
          descendants and process-group members, and every other holder of that pane
          terminal are gone.

          Pane ownership and Agent-session ownership remain independent. The existing
          session coordinator keeps the natural provider, Agent, and logical-session key.
          Two panes naming one logical session still contend without waiting; one pane's
          terminal claim cannot ensure, create, resume, detach, prompt, attach to, or
          otherwise authorize an Agent session. Distinct sessions may be owned
          concurrently.

          The launch acknowledges pane readiness only from the native child's successful
          runtime spawn event and before waiting for exit. Session preparation, route
          publication, private instruction-file creation, ACP detach, PID allocation, and
          first output are not readiness. A failed spawn leaves any already-completed
          durable launch phases intact and participates in the grid's hidden startup
          teardown.

          After attachment, a native UI's independent nonzero exit fails its pane flow and
          does not cancel siblings. Reader close cancels a still-live launch through the
          ordinary launch path, awaits native child teardown and Agent-session quiescence,
          and does not turn that cancellation into another pane failure. Parent
          cancellation remains cancellation.

          All existing #517 rules remain true: prepared instructions are not a Prompt or
          transcript, ACP and the native UI never own one session concurrently,
          construction routes remain create-once, executable binding and provider-native
          identity remain exact, and completed replay launches nothing. An incomplete
          launch inside a pane preserves its existing prepared/detached identity and
          never substitutes another conversation.

          Acceptance

          • A checked-in executable Markdown journey uses a controlled provider to start
            at least two distinct native Agent sessions in different panes before the grid
            attaches; both remain concurrently interactive.
          • A root launch still takes the root foreground lease. A grid and root launch
            cannot overlap, while two pane launches in distinct panes do not contend for
            terminal ownership.
          • Two overlapping launches in one pane refuse. A sequential launch is admitted
            only after the prior pane terminal is proven quiescent.
          • Two panes naming one logical Agent session still contend through the existing
            non-waiting coordinator. Distinct sessions acquire distinct ownership without
            any pane-derived key or authority.
          • The pane readiness latch is acknowledged only by the runtime spawn event. A
            launch failure before spawn prevents grid attachment without rolling back
            earlier durable Agent preparation.
          • Exact argv, cwd, environment, provider-native identity, construction route,
            instruction layer, executable binding, and durable launch phases are the same
            values the root launch would use; no provider layout identity enters them.
          • One pane's native exit becomes only that pane's status. Grid close cancels
            live launches, awaits native process teardown and session quiescence, and lets
            the document continue only afterwards.
          • Completed grid replay contacts no Agent provider, coordinator, or native
            launcher. Partial replay of a launch retains the existing Launch a deterministically prepared Agent session in its native UI #517 identity and
            reconciliation behavior.
          • TestAgent proves the journey without starting Claude, Codex, or a model. The
            grid adds no native-launch advertisement, and an unadvertised Agent still
            refuses before session ownership moves.

          This Story owns TG5 and the Agent-session and native-launch portions of TG11,
          plus native-session-launch checklist items 24–27. It reuses #730's lifecycle and
          does not duplicate its generic provider, shell, or replay tests.

          Focused evidence

          Extend the existing native-launch layers and add one authored grid journey:

          deno task test packages/core/tests/agent-session-launch.test.ts
          deno task test packages/runtime/tests/native-launcher.test.ts
          deno task test packages/test-agent/tests/native-launch.test.ts
          deno task test packages/test-agent/tests/terminal-grid-native-launch.test.ts

          The authored journey belongs beside the TestAgent native-session launch
          documents and uses controlled start, exit, contention, cancellation, and
          quiescence signals. No real Agent CLI is delivery evidence for this Story.

          Dependencies and exclusions

          Verification stack

          This Story is the fourth layer of #717's linear verification stack.

          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

              Launch native Agent sessions in independent terminal panes #731

              Description

              @taras

              Story

              As an executable-document author, I want native Agent sessions in different
              terminal panes to remain interactive at the same time, so a terminal grid can
              host independent Implementor, Planner, Architect, or reviewer sessions without
              weakening their existing continuity and ownership guarantees.

              This is the native Agent integration Story under #717. It composes the
              provider-neutral pane authority from #730 with the native launch contract from
              #517. It does not implement tmux or advertise another Agent provider.

              Contract

              At the root, <Session.Launch> keeps its current behavior: it takes the
              document execution's foreground-terminal lease and hands the inherited terminal
              to one native UI. Inside a paired <Terminal>, core installs a pane-scoped
              native launcher that closes over that pane's private claim and readiness latch.
              <Session.Launch> uses the launcher already in scope; it receives no pane prop,
              token, identifier, or mode, and its public launch request and durable result do
              not change.

              The pane launcher validates the exact claim through the host terminal authority,
              reserves only that pane, flushes that pane, and starts the provider's exact
              native launch request there. Launches in distinct panes may own their terminals
              concurrently. A second live launch in the same pane refuses. Sequential launches
              in one pane are admitted only after the previous child, its observable
              descendants and process-group members, and every other holder of that pane
              terminal are gone.

              Pane ownership and Agent-session ownership remain independent. The existing
              session coordinator keeps the natural provider, Agent, and logical-session key.
              Two panes naming one logical session still contend without waiting; one pane's
              terminal claim cannot ensure, create, resume, detach, prompt, attach to, or
              otherwise authorize an Agent session. Distinct sessions may be owned
              concurrently.

              The launch acknowledges pane readiness only from the native child's successful
              runtime spawn event and before waiting for exit. Session preparation, route
              publication, private instruction-file creation, ACP detach, PID allocation, and
              first output are not readiness. A failed spawn leaves any already-completed
              durable launch phases intact and participates in the grid's hidden startup
              teardown.

              After attachment, a native UI's independent nonzero exit fails its pane flow and
              does not cancel siblings. Reader close cancels a still-live launch through the
              ordinary launch path, awaits native child teardown and Agent-session quiescence,
              and does not turn that cancellation into another pane failure. Parent
              cancellation remains cancellation.

              All existing #517 rules remain true: prepared instructions are not a Prompt or
              transcript, ACP and the native UI never own one session concurrently,
              construction routes remain create-once, executable binding and provider-native
              identity remain exact, and completed replay launches nothing. An incomplete
              launch inside a pane preserves its existing prepared/detached identity and
              never substitutes another conversation.

              Acceptance

              • A checked-in executable Markdown journey uses a controlled provider to start
                at least two distinct native Agent sessions in different panes before the grid
                attaches; both remain concurrently interactive.
              • A root launch still takes the root foreground lease. A grid and root launch
                cannot overlap, while two pane launches in distinct panes do not contend for
                terminal ownership.
              • Two overlapping launches in one pane refuse. A sequential launch is admitted
                only after the prior pane terminal is proven quiescent.
              • Two panes naming one logical Agent session still contend through the existing
                non-waiting coordinator. Distinct sessions acquire distinct ownership without
                any pane-derived key or authority.
              • The pane readiness latch is acknowledged only by the runtime spawn event. A
                launch failure before spawn prevents grid attachment without rolling back
                earlier durable Agent preparation.
              • Exact argv, cwd, environment, provider-native identity, construction route,
                instruction layer, executable binding, and durable launch phases are the same
                values the root launch would use; no provider layout identity enters them.
              • One pane's native exit becomes only that pane's status. Grid close cancels
                live launches, awaits native process teardown and session quiescence, and lets
                the document continue only afterwards.
              • Completed grid replay contacts no Agent provider, coordinator, or native
                launcher. Partial replay of a launch retains the existing Launch a deterministically prepared Agent session in its native UI #517 identity and
                reconciliation behavior.
              • TestAgent proves the journey without starting Claude, Codex, or a model. The
                grid adds no native-launch advertisement, and an unadvertised Agent still
                refuses before session ownership moves.

              This Story owns TG5 and the Agent-session and native-launch portions of TG11,
              plus native-session-launch checklist items 24–27. It reuses #730's lifecycle and
              does not duplicate its generic provider, shell, or replay tests.

              Focused evidence

              Extend the existing native-launch layers and add one authored grid journey:

              deno task test packages/core/tests/agent-session-launch.test.ts
              deno task test packages/runtime/tests/native-launcher.test.ts
              deno task test packages/test-agent/tests/native-launch.test.ts
              deno task test packages/test-agent/tests/terminal-grid-native-launch.test.ts

              The authored journey belongs beside the TestAgent native-session launch
              documents and uses controlled start, exit, contention, cancellation, and
              quiescence signals. No real Agent CLI is delivery evidence for this Story.

              Dependencies and exclusions

              Verification stack

              This Story is the fourth layer of #717's linear verification stack.

              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

                  Launch native Agent sessions in independent terminal panes #731

                  Description

                  @taras

                  Story

                  As an executable-document author, I want native Agent sessions in different
                  terminal panes to remain interactive at the same time, so a terminal grid can
                  host independent Implementor, Planner, Architect, or reviewer sessions without
                  weakening their existing continuity and ownership guarantees.

                  This is the native Agent integration Story under #717. It composes the
                  provider-neutral pane authority from #730 with the native launch contract from
                  #517. It does not implement tmux or advertise another Agent provider.

                  Contract

                  At the root, <Session.Launch> keeps its current behavior: it takes the
                  document execution's foreground-terminal lease and hands the inherited terminal
                  to one native UI. Inside a paired <Terminal>, core installs a pane-scoped
                  native launcher that closes over that pane's private claim and readiness latch.
                  <Session.Launch> uses the launcher already in scope; it receives no pane prop,
                  token, identifier, or mode, and its public launch request and durable result do
                  not change.

                  The pane launcher validates the exact claim through the host terminal authority,
                  reserves only that pane, flushes that pane, and starts the provider's exact
                  native launch request there. Launches in distinct panes may own their terminals
                  concurrently. A second live launch in the same pane refuses. Sequential launches
                  in one pane are admitted only after the previous child, its observable
                  descendants and process-group members, and every other holder of that pane
                  terminal are gone.

                  Pane ownership and Agent-session ownership remain independent. The existing
                  session coordinator keeps the natural provider, Agent, and logical-session key.
                  Two panes naming one logical session still contend without waiting; one pane's
                  terminal claim cannot ensure, create, resume, detach, prompt, attach to, or
                  otherwise authorize an Agent session. Distinct sessions may be owned
                  concurrently.

                  The launch acknowledges pane readiness only from the native child's successful
                  runtime spawn event and before waiting for exit. Session preparation, route
                  publication, private instruction-file creation, ACP detach, PID allocation, and
                  first output are not readiness. A failed spawn leaves any already-completed
                  durable launch phases intact and participates in the grid's hidden startup
                  teardown.

                  After attachment, a native UI's independent nonzero exit fails its pane flow and
                  does not cancel siblings. Reader close cancels a still-live launch through the
                  ordinary launch path, awaits native child teardown and Agent-session quiescence,
                  and does not turn that cancellation into another pane failure. Parent
                  cancellation remains cancellation.

                  All existing #517 rules remain true: prepared instructions are not a Prompt or
                  transcript, ACP and the native UI never own one session concurrently,
                  construction routes remain create-once, executable binding and provider-native
                  identity remain exact, and completed replay launches nothing. An incomplete
                  launch inside a pane preserves its existing prepared/detached identity and
                  never substitutes another conversation.

                  Acceptance

                  • A checked-in executable Markdown journey uses a controlled provider to start
                    at least two distinct native Agent sessions in different panes before the grid
                    attaches; both remain concurrently interactive.
                  • A root launch still takes the root foreground lease. A grid and root launch
                    cannot overlap, while two pane launches in distinct panes do not contend for
                    terminal ownership.
                  • Two overlapping launches in one pane refuse. A sequential launch is admitted
                    only after the prior pane terminal is proven quiescent.
                  • Two panes naming one logical Agent session still contend through the existing
                    non-waiting coordinator. Distinct sessions acquire distinct ownership without
                    any pane-derived key or authority.
                  • The pane readiness latch is acknowledged only by the runtime spawn event. A
                    launch failure before spawn prevents grid attachment without rolling back
                    earlier durable Agent preparation.
                  • Exact argv, cwd, environment, provider-native identity, construction route,
                    instruction layer, executable binding, and durable launch phases are the same
                    values the root launch would use; no provider layout identity enters them.
                  • One pane's native exit becomes only that pane's status. Grid close cancels
                    live launches, awaits native process teardown and session quiescence, and lets
                    the document continue only afterwards.
                  • Completed grid replay contacts no Agent provider, coordinator, or native
                    launcher. Partial replay of a launch retains the existing Launch a deterministically prepared Agent session in its native UI #517 identity and
                    reconciliation behavior.
                  • TestAgent proves the journey without starting Claude, Codex, or a model. The
                    grid adds no native-launch advertisement, and an unadvertised Agent still
                    refuses before session ownership moves.

                  This Story owns TG5 and the Agent-session and native-launch portions of TG11,
                  plus native-session-launch checklist items 24–27. It reuses #730's lifecycle and
                  does not duplicate its generic provider, shell, or replay tests.

                  Focused evidence

                  Extend the existing native-launch layers and add one authored grid journey:

                  deno task test packages/core/tests/agent-session-launch.test.ts
                  deno task test packages/runtime/tests/native-launcher.test.ts
                  deno task test packages/test-agent/tests/native-launch.test.ts
                  deno task test packages/test-agent/tests/terminal-grid-native-launch.test.ts

                  The authored journey belongs beside the TestAgent native-session launch
                  documents and uses controlled start, exit, contention, cancellation, and
                  quiescence signals. No real Agent CLI is delivery evidence for this Story.

                  Dependencies and exclusions

                  Verification stack

                  This Story is the fourth layer of #717's linear verification stack.

                  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

                      Launch native Agent sessions in independent terminal panes #731

                      Description

                      @taras

                      Story

                      As an executable-document author, I want native Agent sessions in different
                      terminal panes to remain interactive at the same time, so a terminal grid can
                      host independent Implementor, Planner, Architect, or reviewer sessions without
                      weakening their existing continuity and ownership guarantees.

                      This is the native Agent integration Story under #717. It composes the
                      provider-neutral pane authority from #730 with the native launch contract from
                      #517. It does not implement tmux or advertise another Agent provider.

                      Contract

                      At the root, <Session.Launch> keeps its current behavior: it takes the
                      document execution's foreground-terminal lease and hands the inherited terminal
                      to one native UI. Inside a paired <Terminal>, core installs a pane-scoped
                      native launcher that closes over that pane's private claim and readiness latch.
                      <Session.Launch> uses the launcher already in scope; it receives no pane prop,
                      token, identifier, or mode, and its public launch request and durable result do
                      not change.

                      The pane launcher validates the exact claim through the host terminal authority,
                      reserves only that pane, flushes that pane, and starts the provider's exact
                      native launch request there. Launches in distinct panes may own their terminals
                      concurrently. A second live launch in the same pane refuses. Sequential launches
                      in one pane are admitted only after the previous child, its observable
                      descendants and process-group members, and every other holder of that pane
                      terminal are gone.

                      Pane ownership and Agent-session ownership remain independent. The existing
                      session coordinator keeps the natural provider, Agent, and logical-session key.
                      Two panes naming one logical session still contend without waiting; one pane's
                      terminal claim cannot ensure, create, resume, detach, prompt, attach to, or
                      otherwise authorize an Agent session. Distinct sessions may be owned
                      concurrently.

                      The launch acknowledges pane readiness only from the native child's successful
                      runtime spawn event and before waiting for exit. Session preparation, route
                      publication, private instruction-file creation, ACP detach, PID allocation, and
                      first output are not readiness. A failed spawn leaves any already-completed
                      durable launch phases intact and participates in the grid's hidden startup
                      teardown.

                      After attachment, a native UI's independent nonzero exit fails its pane flow and
                      does not cancel siblings. Reader close cancels a still-live launch through the
                      ordinary launch path, awaits native child teardown and Agent-session quiescence,
                      and does not turn that cancellation into another pane failure. Parent
                      cancellation remains cancellation.

                      All existing #517 rules remain true: prepared instructions are not a Prompt or
                      transcript, ACP and the native UI never own one session concurrently,
                      construction routes remain create-once, executable binding and provider-native
                      identity remain exact, and completed replay launches nothing. An incomplete
                      launch inside a pane preserves its existing prepared/detached identity and
                      never substitutes another conversation.

                      Acceptance

                      • A checked-in executable Markdown journey uses a controlled provider to start
                        at least two distinct native Agent sessions in different panes before the grid
                        attaches; both remain concurrently interactive.
                      • A root launch still takes the root foreground lease. A grid and root launch
                        cannot overlap, while two pane launches in distinct panes do not contend for
                        terminal ownership.
                      • Two overlapping launches in one pane refuse. A sequential launch is admitted
                        only after the prior pane terminal is proven quiescent.
                      • Two panes naming one logical Agent session still contend through the existing
                        non-waiting coordinator. Distinct sessions acquire distinct ownership without
                        any pane-derived key or authority.
                      • The pane readiness latch is acknowledged only by the runtime spawn event. A
                        launch failure before spawn prevents grid attachment without rolling back
                        earlier durable Agent preparation.
                      • Exact argv, cwd, environment, provider-native identity, construction route,
                        instruction layer, executable binding, and durable launch phases are the same
                        values the root launch would use; no provider layout identity enters them.
                      • One pane's native exit becomes only that pane's status. Grid close cancels
                        live launches, awaits native process teardown and session quiescence, and lets
                        the document continue only afterwards.
                      • Completed grid replay contacts no Agent provider, coordinator, or native
                        launcher. Partial replay of a launch retains the existing Launch a deterministically prepared Agent session in its native UI #517 identity and
                        reconciliation behavior.
                      • TestAgent proves the journey without starting Claude, Codex, or a model. The
                        grid adds no native-launch advertisement, and an unadvertised Agent still
                        refuses before session ownership moves.

                      This Story owns TG5 and the Agent-session and native-launch portions of TG11,
                      plus native-session-launch checklist items 24–27. It reuses #730's lifecycle and
                      does not duplicate its generic provider, shell, or replay tests.

                      Focused evidence

                      Extend the existing native-launch layers and add one authored grid journey:

                      deno task test packages/core/tests/agent-session-launch.test.ts
                      deno task test packages/runtime/tests/native-launcher.test.ts
                      deno task test packages/test-agent/tests/native-launch.test.ts
                      deno task test packages/test-agent/tests/terminal-grid-native-launch.test.ts

                      The authored journey belongs beside the TestAgent native-session launch
                      documents and uses controlled start, exit, contention, cancellation, and
                      quiescence signals. No real Agent CLI is delivery evidence for this Story.

                      Dependencies and exclusions

                      Verification stack

                      This Story is the fourth layer of #717's linear verification stack.

                      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

                          Launch native Agent sessions in independent terminal panes #731

                          Description

                          @taras

                          Story

                          As an executable-document author, I want native Agent sessions in different
                          terminal panes to remain interactive at the same time, so a terminal grid can
                          host independent Implementor, Planner, Architect, or reviewer sessions without
                          weakening their existing continuity and ownership guarantees.

                          This is the native Agent integration Story under #717. It composes the
                          provider-neutral pane authority from #730 with the native launch contract from
                          #517. It does not implement tmux or advertise another Agent provider.

                          Contract

                          At the root, <Session.Launch> keeps its current behavior: it takes the
                          document execution's foreground-terminal lease and hands the inherited terminal
                          to one native UI. Inside a paired <Terminal>, core installs a pane-scoped
                          native launcher that closes over that pane's private claim and readiness latch.
                          <Session.Launch> uses the launcher already in scope; it receives no pane prop,
                          token, identifier, or mode, and its public launch request and durable result do
                          not change.

                          The pane launcher validates the exact claim through the host terminal authority,
                          reserves only that pane, flushes that pane, and starts the provider's exact
                          native launch request there. Launches in distinct panes may own their terminals
                          concurrently. A second live launch in the same pane refuses. Sequential launches
                          in one pane are admitted only after the previous child, its observable
                          descendants and process-group members, and every other holder of that pane
                          terminal are gone.

                          Pane ownership and Agent-session ownership remain independent. The existing
                          session coordinator keeps the natural provider, Agent, and logical-session key.
                          Two panes naming one logical session still contend without waiting; one pane's
                          terminal claim cannot ensure, create, resume, detach, prompt, attach to, or
                          otherwise authorize an Agent session. Distinct sessions may be owned
                          concurrently.

                          The launch acknowledges pane readiness only from the native child's successful
                          runtime spawn event and before waiting for exit. Session preparation, route
                          publication, private instruction-file creation, ACP detach, PID allocation, and
                          first output are not readiness. A failed spawn leaves any already-completed
                          durable launch phases intact and participates in the grid's hidden startup
                          teardown.

                          After attachment, a native UI's independent nonzero exit fails its pane flow and
                          does not cancel siblings. Reader close cancels a still-live launch through the
                          ordinary launch path, awaits native child teardown and Agent-session quiescence,
                          and does not turn that cancellation into another pane failure. Parent
                          cancellation remains cancellation.

                          All existing #517 rules remain true: prepared instructions are not a Prompt or
                          transcript, ACP and the native UI never own one session concurrently,
                          construction routes remain create-once, executable binding and provider-native
                          identity remain exact, and completed replay launches nothing. An incomplete
                          launch inside a pane preserves its existing prepared/detached identity and
                          never substitutes another conversation.

                          Acceptance

                          • A checked-in executable Markdown journey uses a controlled provider to start
                            at least two distinct native Agent sessions in different panes before the grid
                            attaches; both remain concurrently interactive.
                          • A root launch still takes the root foreground lease. A grid and root launch
                            cannot overlap, while two pane launches in distinct panes do not contend for
                            terminal ownership.
                          • Two overlapping launches in one pane refuse. A sequential launch is admitted
                            only after the prior pane terminal is proven quiescent.
                          • Two panes naming one logical Agent session still contend through the existing
                            non-waiting coordinator. Distinct sessions acquire distinct ownership without
                            any pane-derived key or authority.
                          • The pane readiness latch is acknowledged only by the runtime spawn event. A
                            launch failure before spawn prevents grid attachment without rolling back
                            earlier durable Agent preparation.
                          • Exact argv, cwd, environment, provider-native identity, construction route,
                            instruction layer, executable binding, and durable launch phases are the same
                            values the root launch would use; no provider layout identity enters them.
                          • One pane's native exit becomes only that pane's status. Grid close cancels
                            live launches, awaits native process teardown and session quiescence, and lets
                            the document continue only afterwards.
                          • Completed grid replay contacts no Agent provider, coordinator, or native
                            launcher. Partial replay of a launch retains the existing Launch a deterministically prepared Agent session in its native UI #517 identity and
                            reconciliation behavior.
                          • TestAgent proves the journey without starting Claude, Codex, or a model. The
                            grid adds no native-launch advertisement, and an unadvertised Agent still
                            refuses before session ownership moves.

                          This Story owns TG5 and the Agent-session and native-launch portions of TG11,
                          plus native-session-launch checklist items 24–27. It reuses #730's lifecycle and
                          does not duplicate its generic provider, shell, or replay tests.

                          Focused evidence

                          Extend the existing native-launch layers and add one authored grid journey:

                          deno task test packages/core/tests/agent-session-launch.test.ts
                          deno task test packages/runtime/tests/native-launcher.test.ts
                          deno task test packages/test-agent/tests/native-launch.test.ts
                          deno task test packages/test-agent/tests/terminal-grid-native-launch.test.ts

                          The authored journey belongs beside the TestAgent native-session launch
                          documents and uses controlled start, exit, contention, cancellation, and
                          quiescence signals. No real Agent CLI is delivery evidence for this Story.

                          Dependencies and exclusions

                          Verification stack

                          This Story is the fourth layer of #717's linear verification stack.

                          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

                              Launch native Agent sessions in independent terminal panes #731

                              Description

                              @taras

                              Story

                              As an executable-document author, I want native Agent sessions in different
                              terminal panes to remain interactive at the same time, so a terminal grid can
                              host independent Implementor, Planner, Architect, or reviewer sessions without
                              weakening their existing continuity and ownership guarantees.

                              This is the native Agent integration Story under #717. It composes the
                              provider-neutral pane authority from #730 with the native launch contract from
                              #517. It does not implement tmux or advertise another Agent provider.

                              Contract

                              At the root, <Session.Launch> keeps its current behavior: it takes the
                              document execution's foreground-terminal lease and hands the inherited terminal
                              to one native UI. Inside a paired <Terminal>, core installs a pane-scoped
                              native launcher that closes over that pane's private claim and readiness latch.
                              <Session.Launch> uses the launcher already in scope; it receives no pane prop,
                              token, identifier, or mode, and its public launch request and durable result do
                              not change.

                              The pane launcher validates the exact claim through the host terminal authority,
                              reserves only that pane, flushes that pane, and starts the provider's exact
                              native launch request there. Launches in distinct panes may own their terminals
                              concurrently. A second live launch in the same pane refuses. Sequential launches
                              in one pane are admitted only after the previous child, its observable
                              descendants and process-group members, and every other holder of that pane
                              terminal are gone.

                              Pane ownership and Agent-session ownership remain independent. The existing
                              session coordinator keeps the natural provider, Agent, and logical-session key.
                              Two panes naming one logical session still contend without waiting; one pane's
                              terminal claim cannot ensure, create, resume, detach, prompt, attach to, or
                              otherwise authorize an Agent session. Distinct sessions may be owned
                              concurrently.

                              The launch acknowledges pane readiness only from the native child's successful
                              runtime spawn event and before waiting for exit. Session preparation, route
                              publication, private instruction-file creation, ACP detach, PID allocation, and
                              first output are not readiness. A failed spawn leaves any already-completed
                              durable launch phases intact and participates in the grid's hidden startup
                              teardown.

                              After attachment, a native UI's independent nonzero exit fails its pane flow and
                              does not cancel siblings. Reader close cancels a still-live launch through the
                              ordinary launch path, awaits native child teardown and Agent-session quiescence,
                              and does not turn that cancellation into another pane failure. Parent
                              cancellation remains cancellation.

                              All existing #517 rules remain true: prepared instructions are not a Prompt or
                              transcript, ACP and the native UI never own one session concurrently,
                              construction routes remain create-once, executable binding and provider-native
                              identity remain exact, and completed replay launches nothing. An incomplete
                              launch inside a pane preserves its existing prepared/detached identity and
                              never substitutes another conversation.

                              Acceptance

                              • A checked-in executable Markdown journey uses a controlled provider to start
                                at least two distinct native Agent sessions in different panes before the grid
                                attaches; both remain concurrently interactive.
                              • A root launch still takes the root foreground lease. A grid and root launch
                                cannot overlap, while two pane launches in distinct panes do not contend for
                                terminal ownership.
                              • Two overlapping launches in one pane refuse. A sequential launch is admitted
                                only after the prior pane terminal is proven quiescent.
                              • Two panes naming one logical Agent session still contend through the existing
                                non-waiting coordinator. Distinct sessions acquire distinct ownership without
                                any pane-derived key or authority.
                              • The pane readiness latch is acknowledged only by the runtime spawn event. A
                                launch failure before spawn prevents grid attachment without rolling back
                                earlier durable Agent preparation.
                              • Exact argv, cwd, environment, provider-native identity, construction route,
                                instruction layer, executable binding, and durable launch phases are the same
                                values the root launch would use; no provider layout identity enters them.
                              • One pane's native exit becomes only that pane's status. Grid close cancels
                                live launches, awaits native process teardown and session quiescence, and lets
                                the document continue only afterwards.
                              • Completed grid replay contacts no Agent provider, coordinator, or native
                                launcher. Partial replay of a launch retains the existing Launch a deterministically prepared Agent session in its native UI #517 identity and
                                reconciliation behavior.
                              • TestAgent proves the journey without starting Claude, Codex, or a model. The
                                grid adds no native-launch advertisement, and an unadvertised Agent still
                                refuses before session ownership moves.

                              This Story owns TG5 and the Agent-session and native-launch portions of TG11,
                              plus native-session-launch checklist items 24–27. It reuses #730's lifecycle and
                              does not duplicate its generic provider, shell, or replay tests.

                              Focused evidence

                              Extend the existing native-launch layers and add one authored grid journey:

                              deno task test packages/core/tests/agent-session-launch.test.ts
                              deno task test packages/runtime/tests/native-launcher.test.ts
                              deno task test packages/test-agent/tests/native-launch.test.ts
                              deno task test packages/test-agent/tests/terminal-grid-native-launch.test.ts

                              The authored journey belongs beside the TestAgent native-session launch
                              documents and uses controlled start, exit, contention, cancellation, and
                              quiescence signals. No real Agent CLI is delivery evidence for this Story.

                              Dependencies and exclusions

                              Verification stack

                              This Story is the fourth layer of #717's linear verification stack.

                              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