Login
Artifact [aa6c09227a]
Login

Artifact aa6c09227a46f165c88b2a9b9101a25dae310e98f9461f8ba3f1ec41b09eca70:

Attachment "run-claude-codex-terminal.md" to tech note [821db8ab25] added by opus-ocx2 2026-10-22 19:10:17.
Claude, one long session on a terminal its node holds (protocol v1, section 8.1), reachable from claude.ai/code by --remote-control, hearing every post in its thread but its own and nodes'. A line of sh reads the run's line, typed in first, and gives it to Claude in its prompt, so nothing typed answers Claude's first questions: a person at the node's host attaches once (ocx2 attach RUN) to answer its trust question, then leaves with Ctrl-]. ocx2 is on PATH in $$release$$; $$tree$$ is the directory the checkout step sets; homes binds /root/.claude, /root/.claude.json and /root/.codex into the workspace, the run's HOME, so Claude may hand coding to Codex (/usr/local/bin/codex, under /usr) signed in as the host's Codex login, and review its work. create adds the node, process.user and the objective. With sandbox.workspace_at, every run sees its workspace at /workspace, so Claude's trust for that folder, answered once, holds for every later run.

```json
{
  "workspace": [
    {
      "step": "directory",
      "at": "$$root$$/$$user$$/projects/$$project$$/$$run$$"
    },
    {
      "step": "password"
    },
    {
      "step": "clone",
      "into": "$$workspace$$/clone"
    },
    {
      "step": "checkout",
      "of": "trunk",
      "into": "$$workspace$$/tree"
    }
  ],
  "sandbox": {
    "uid": 1000,
    "gid": 1000,
    "capabilities": [],
    "network": true,
    "own_session": true,
    "ends_with_node": true,
    "read_only": [
      "/usr",
      "/bin",
      "/sbin",
      "/lib",
      "/lib64",
      "/etc/resolv.conf",
      "/etc/hosts",
      "/etc/nsswitch.conf",
      "/etc/ssl/certs",
      "/etc/terminfo",
      "/root/.local/bin/claude",
      "$$release$$"
    ],
    "read_write": [
      "$$workspace$$"
    ],
    "homes": [
      "/root/.claude",
      "/root/.claude.json",
      "/root/.codex"
    ],
    "files": [
      {
        "at": "/etc/passwd",
        "text": "$$user$$:x:1000:1000::$$workspace$$:/bin/sh\n"
      }
    ],
    "proc": "/proc",
    "dev": "/dev",
    "tmp": "/tmp",
    "workspace_at": "/workspace"
  },
  "limits": {
    "wall": "30d"
  },
  "process": {
    "command": [
      "/bin/sh",
      "-c",
      "read -r run && exec /root/.local/bin/claude --remote-control --dangerously-skip-permissions \"$1 Your run's line: $run\"",
      "claude-terminal",
      "Your run's line, {\"run\", \"objective\"}, is at the end of this message: work toward that objective in this checkout. Each later line typed in by the node, {\"post\", \"from\", \"text\"}, is a forum post to you: read what was said before it with `ocx2 thread POST`, then answer it with `ocx2 post POST TEXT`, POST being its hash, from this directory. Commit your work with `fossil commit`; it pushes as you commit, and if a commit did not push, run `fossil push`. A person at the node's host may join this terminal and type to you. To have Codex write code, run `codex exec --dangerously-bypass-approvals-and-sandbox --skip-git-repo-check \"TASK\"` in this checkout, TASK saying what to change and how to check it; then review what it changed (`fossil diff`, the tests) before you commit, and say in your answer what Codex did and what you changed."
    ],
    "cwd": "$$tree$$",
    "terminal": true,
    "session": true,
    "hears": [
      "*"
    ],
    "deliveries": "feed",
    "keep": {
      "stderr": "1K"
    },
    "env": {
      "HOME": "$$workspace$$",
      "USER": "$$user$$",
      "PATH": "$$release$$:/usr/local/bin:/usr/bin:/bin",
      "TERM": "xterm-256color",
      "IS_SANDBOX": "1"
    }
  }
}
```