Skip to content

paseo kit: opencode with no arguments prints Paseo's connect banner instead of starting OpenCode on msb #548

Closed

Description

@basiliskus

The paseo kit drops a wrapper at ~/.local/bin/opencode, first on the guest PATH, that passes any arguments through to the real OpenCode but, with no arguments, execs paseo-agent-shim. The shim was designed for a backend where the bare opencode is the sandbox entrypoint (PID 1): it pins Paseo's worktree root, prints the host-connect instructions, and holds PID 1 so the sandbox stays up.

On msb that assumption doesn't hold. acq run <sandbox> runs msb exec -t ... -- opencode (acq.backends/msb.sh), and a typed opencode in acq shell does the same, so neither is PID 1. The shim prints the banner, says "This command is exiting and returning your terminal", and exits. A user who installed the paseo kit can't open OpenCode's TUI with the bare command, and nothing tells them to pass an argument.

Reproduce (msb 0.7.11, quickstart main b433a61, paseo kit at 94f807a, devenv-shell:1.0.0):

acq run <sandbox>          # from the host
# or, inside `acq shell <sandbox>`:
opencode

Both print the "Paseo daemon + web UI are up on 127.0.0.1:6767" banner and return to the prompt instead of opening OpenCode. command -v opencode resolves to /home/agent/.local/bin/opencode; opencode . or /usr/local/bin/opencode opens the TUI.

A second concern, from reading the shim, not reproduced: its worktree-root step uses its own cwd, so a bare opencode typed in a repo other than the primary workspace would repoint worktrees.root and restart the daemon worker (paseo daemon restart), which may interrupt running agents.

Ask: on the no-argument path, run the shim only when the wrapper is PID 1 (the case it exists for), and otherwise exec the real opencode. #535 now seeds worktrees.root from ACQ_WORKSPACE at startup, so the non-PID-1 path may not need the shim's worktree step at all. Alternatively, drop the wrapper on backends where the agent isn't the entrypoint.

Activity

  1. wz-gsa commented on Nov 3, 2026

    @wz-gsa
    Contributor

    Acceptance reconciliation for #548: fixed by #559, merged as ce4aa08. Bare non-PID-1 opencode invokes the real binary; PID-1/no-argument dispatch remains the Paseo shim.

    Recorded live verification used a disposable MSB sandbox with wrapper/shim hashes matching the merged kit. Real-PTY bare opencode runs from scratch workspace and /home/agent reached the TUI without the Paseo connect banner and left worktrees.root unchanged. Runs were deliberately timeout-terminated; timeout was not counted as a successful process exit. Additional live checks confirmed RW child repos registered and the RO fixture excluded. Test sandboxes were removed.

    Live PID-1 hold and an actual browser session remain unmeasured because detached MSB used tini as PID 1. Those broader checks are not claimed complete here; the reported MSB TUI-routing and root-repin concern is addressed. Closing that original bug with operator authorization. AI-assisted verification and reconciliation.

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

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions