Dashboard › opencode › Session 1NVyZh8FhrP3
1NVyZh8FhrP3Z3Yh1Research and propose a minimal secure Linux/systemd PTY supervisor design for this exact pilot. Current Node SEA service is intended as system unit opencode-v2.service, user byk. Plugin needs spawn/write/output/kill/exit. In-process child groups are insufficient because descendants can setsid/daemonize. Host has systemd system bus but unprivileged calls require auth; no user bus, no cgroup delegation, NoNewPrivileges. Determine whether a root-owned Unix socket supervisor can authenticate the connecting OpenCode server by SO_PEERCRED PID plus exact cgroup, then launch each PTY through systemd-run --pipe --wait --collect --unit=... --property=User=byk --property=KillMode=control-group -- /usr/bin/script ... while retaining interactive stdin/stdout. Analyze races, escaped-child containment, unit cleanup, socket protocol, peer impersonation by same UID child, unit-name injection, cwd binding, environment, output bounds, backpressure, supervisor restart, and whether systemd-run --pipe actually supports the needed behavior. Inspect local man pages/binaries/source where available. Do not edit files or services. Return a concrete architecture, exact commands/properties, unavoidable risks, and MERGE/DO-NOT-MERGE for implementing this approach.
I’ll inspect the exact host binaries, systemd documentation, unit state, cgroup layout, and current pilot code without changing files or services. I’ll then test only non-mutating command semantics where possible and separate verified behavior from design conclusions.
[
{
"content": "Inspect current pilot service, plugin code, host systemd versions, cgroup layout, and applicable local guidance",
"status": "in_progress",
"priority": "high"
},
{
"content": "Verify systemd-run --pipe behavior and containment/authentication semantics from local docs/source",
"status": "pending",
"priority": "high"
},
{
"content": "Analyze protocol, races, resource bounds, restart behavior, and same-UID impersonation threat",
"status": "pending",
"priority": "high"
},
{
"content": "Produce concrete minimal architecture, commands/properties, risks, and merge verdict",
"status": "pending",
"priority": "high"
}
]
/home/byk/Code/opencode/packages/session-ui/src/v2/components/session-review-empty-no-git-v2.tsx /home/byk/Code/opencode/packages/session-ui/src/v2/components/session-review-empty-changes-v2.tsx /home/byk/Code/opencode/packages/schema/src/pty.ts /home/byk/Code/opencode/packages/schema/src/pty-ticket.ts /home/byk/Code/opencode/packages/protocol/src/groups/pty.ts /home/byk/Code/opencode/packages/opencode/test/server/httpapi-v2-pty.test.ts /home/byk/Code/opencode/packages/opencode/test/server/httpapi-pty.test.ts /home/byk/Code/opencode/packages/opencode/test/config/fixtures/empty-frontmatter.md /home/byk/Code/opencode/packages/core/script/fix-node-pty.ts /home/byk/Code/opencode/packages/opencode/src/plugin/pty-environment.ts /home/byk/Code/opencode/packages/core/test/pty/pty-session.test.ts /home/byk/Code/opencode/packages/server/src/pty-environment.ts /home/byk/Code/opencode/packages/server/src/handlers/pty.ts /home/byk/Code/opencode/packages/core/src/pty.ts /home/byk/Code/opencode/packa...
No files found
Found 2 matches
/home/byk/Code/opencode/packages/codemode/test/openapi.test.ts:
Line 18: return Bun.file(new URL("./fixtures/opencode-v2-openapi.json", import.meta.url)).json() as Promise<Document>
/home/byk/Code/opencode/packages/app/public/sw.js:
Line 2: const CACHE_NAME = "opencode-v2"
systemd 255 (255.4-1ubuntu8.17) +PAM +AUDIT +SELINUX +APPARMOR +IMA +SMACK +SECCOMP +GCRYPT -GNUTLS +OPENSSL +ACL +BLKID +CURL +ELFUTILS +FIDO2 +IDN2 -IDN +IPTC +KMOD +LIBCRYPTSETUP +LIBFDISK +PCRE2 -PWQUALITY +P11KIT +QRENCODE +TPM2 +BZIP2 +LZ4 +XZ +ZLIB +ZSTD -BPF_FRAMEWORK -XKBCOMMON +UTMP +SYSVINIT default-hierarchy=unified
systemd 255 (255.4-1ubuntu8.17) +PAM +AUDIT +SELINUX +APPARMOR +IMA +SMACK +SECCOMP +GCRYPT -GNUTLS +OPENSSL +ACL +BLKID +CURL +ELFUTILS +FIDO2 +IDN2 -IDN +IPTC +KMOD +LIBCRYPTSETUP +LIBFDISK +PCRE2 -PWQUALITY +P11KIT +QRENCODE +TPM2 +BZIP2 +LZ4 +XZ +ZLIB +ZSTD -BPF_FRAMEWORK -XKBCOMMON +UTMP +SYSVINIT default-hierarchy=unified
MainPID=0 ControlGroup= Delegate=no Environment= WorkingDirectory= User= Group= NoNewPrivileges=no KillMode=control-group Id=opencode-v2.service LoadState=not-found ActiveState=inactive SubState=dead
UNIT LOAD ACTIVE SUB DESCRIPTION apparmor.service loaded active exited Load AppArmor profiles apport-autoreport.service masked inactive dead apport-autoreport.service apt-daily-upgrade.service loaded inactive dead Daily apt upgrade and clean activities apt-daily.service loaded inactive dead Daily apt download activities auditd.service not-found inactive dead auditd.service autofs.service not-found inactive dead ...
<path>/home/byk/.local/share/opencode-v2-pilot/config/opencode/plugins/pty.ts</path>
<type>file</type>
<content>
1: import { Plugin } from "@opencode/plugin"
2: import type { Context } from "@opencode/plugin/plugin"
3: import type { ToolContext } from "@opencode/plugin/tool"
4: import { Schema } from "effect"
5: import { spawn } from "node:child_process"
6: import type { ChildProcessWithoutNullStreams } from "node:child_process"
7: import { open, realpath } from "node:fs/promises"
8: import type { FileHandle } from "node:fs/promises"
9: import { constants } from "node:fs"
10:
11: const MAX_BUFFER_SIZE = 1_000_000
12: const MAX_SESSIONS = 25
13: const MAX_SESSIONS_PER_OWNER = 5
14: const DEFAULT_READ_LIMIT = 500
15: const MAX_READ_LIMIT = 2_000
16: const MAX_READ_OFFSET = 10_000
17: const MAX_LINE_LENGTH = 2_000
18: const MAX_PATTERN_LENGTH = 500
19: const MAX_WRITE_SIZE = 65_536
20: const MAX_TIMEOUT_SECONDS = 2_147_483
21: const KILL_GRACE_MS = 1_000
22: const KILL_FORCE_MS = ...
MainPID=2745754
ExecStart={ path=/home/byk/.opencode/server/opencode-server ; argv[]=/home/byk/.opencode/server/opencode-server --hostname=0.0.0.0 --port=4096 ; ignore_errors=no ; start_time=[Tue 2026-09-08 00:33:06 UTC] ; stop_time=[n/a] ; pid=2745754 ; code=(null) ; status=0/0 }
ControlGroup=/system.slice/opencode.service
Delegate=no
Environment=
WorkingDirectory=/home/byk/Code
User=byk
Group=
PrivateTmp=yes
ProtectHome=read-only
ProtectSystem=strict
NoNewPrivileges=yes
RestrictNamespaces=no
KillMode=control-group
Id=opencode.service
FragmentPath=/etc/systemd/system/opencode.service
DropInPaths=/etc/systemd/system/opencode.service.d/10-fossilize-server.conf
# /etc/systemd/system/opencode.service [Unit] Description=Opencode Server After=network.target [Service] Type=simple EnvironmentFile=/home/byk/.opencode/env User=byk WorkingDirectory=/home/byk/Code ExecStart=/home/byk/.opencode/bin/opencode serve --hostname=0.0.0.0 --port=4096 Restart=always RestartSec=5 # Performance enhancements Nice=-5 LimitNOFILE=65535 LimitNPROC=4096 # Memory limit (prevent runaway usage) MemoryMax=13G MemoryHigh=12G # Security hardening NoNewPrivileges=true ProtectSystem=strict ProtectHome=read-only ReadWritePaths=/home/byk PrivateTmp=yes [Install] WantedBy=multi-user.target # /etc/systemd/system/opencode.service.d/10-fossilize-server.conf [Service] ExecStart= ExecStart=/home/byk/.opencode/server/opencode-server --hostname=0.0.0.0 --port=4096
PID PPID SID UID GID COMMAND COMMAND 2745754 1 2745754 1000 1000 MainThread /home/byk/.opencode/server/opencode-server --hostname=0.0.0.0 --port=4096 /proc/2745754/ns/pid uid=0 gid=0 mode=444 inode=4026531836 /proc/2745754/ns/mnt uid=0 gid=0 mode=444 inode=4026532315
<path>/proc/2745754/cgroup</path> <type>file</type> <content> 1: 0::/system.slice/opencode.service (End of file - total 1 lines) </content>
SYSTEMD-RUN(1) systemd-run SYSTEMD-RUN(1)
NAME
systemd-run - Run programs in transient scope units, service units, or
path-, socket-, or timer-triggered service units
SYNOPSIS
systemd-run [OPTIONS...] COMMAND [ARGS...]
systemd-run [OPTIONS...] [PATH OPTIONS...] {COMMAND} [ARGS...]
systemd-run [OPTIONS...] [SOCKET OPTIONS...] {COMMAND} [ARGS...]
systemd-run [OPTIONS...] [TIMER OPTIONS...] {COMMAND} [ARGS...]
DESCRIPTION
systemd-run may be used to create and start a transient .service or
.scope unit and run the specified COMMAND in it. It may also be used to
create and start a transient .path, .socket, or .timer unit, that
activates a .service unit when elapsing. ...
Linux labs 6.8.0-117-generic #117-Ubuntu SMP PREEMPT_DYNAMIC Tue May 5 19:26:24 UTC 2026 x86_64 x86_64 x86_64 GNU/Linux
script from util-linux 2.39.3
systemd-run [OPTIONS...] COMMAND [ARGUMENTS...]
Run the specified command in a transient scope or service.
-h --help Show this help
--version Show package version
--no-ask-password Do not prompt for password
--user Run as user unit
-H --host=[USER@]HOST Operate on remote host
-M --machine=CONTAINER Operate on local container
--scope Run this as scope rather than service
-u --unit=UNIT Run under the specified unit name
-p --property=NAME=VALUE Set service or scope unit property
--description=TEXT Description for unit
--slice=SLICE Run in the specified slice
--slice-inherit Inherit the slice
...
UNIX(7) Miscellaneous Information Manual UNIX(7)
NAME
unix - sockets for local interprocess communication
SYNOPSIS
#include <sys/socket.h>
#include <sys/un.h>
unix_socket = socket(AF_UNIX, type, 0);
error = socketpair(AF_UNIX, type, 0, int *sv);
DESCRIPTION
The AF_UNIX (also known as AF_LOCAL) socket family is used to communi‐
cate between processes on the same machine efficiently. Traditionally,
UNIX domain sockets can be either unnamed, or bound to a filesystem
pathname (marked as being of type socket). Linux also supports an ab‐
stract namespace which is independent of the filesystem. ...
Found 2 matches /usr/include/asm-generic/socket.h: Line 100: #define SO_PEERGROUPS 59 Line 136: #define SO_PEERPIDFD 77
No manual entry for sd_peer_get_owner_uid
The pilot runs today as opencode.service in /system.slice/opencode.service; opencode-v2.service is not installed. The proposed cgroup check can identify the service, but cgroup membership alone authenticates every ordinary child the server starts, so it cannot prevent same-UID child impersonation; the design must also pin the peer to systemd’s current MainPID using a pidfd-backed check.
/* SPDX-License-Identifier: LGPL-2.1-or-later */ #include <getopt.h> #include <stdio.h> #include <fcntl.h> #include <sys/stat.h> #include <sys/types.h> #include "sd-bus.h" #include "sd-event.h" #include "alloc-util.h" #include "build.h" #include "bus-error.h" #include "bus-locator.h" #include "bus-map-properties.h" #include "bus-unit-util.h" #include "bus-wait-for-jobs.h" #include "calendarspec.h" #include "env-util.h" #include "escape.h" #include "exit-status.h" #include "fd-util.h" #include "format-util.h" #include "main-func.h" #include "parse-argument.h" #include "parse-util.h" #include "path-util.h" #include "pretty-print.h" #include "process-util.h" #include "ptyfwd.h" #include "signal-util.h" #include "spawn-polkit-agent.h" #include "strv.h" #include "terminal-util.h" #include "unit-def.h" #include "unit-name.h" #include "user-util.h" static bool arg_ask_password = true; static bool arg_scope = false; static bool arg_remain_after_exit = false; static bool arg_no_block = ...
Found 18 matches /home/byk/.local/share/opencode/tool-output/tool_07f2f7f99001iEz7kP59QOFQH9: Line 44: static bool arg_wait = false; Line 64: ARG_STDIO_DIRECT, /* Directly pass our stdin/stdout/stderr to the activated service, useful for usage in shell pipelines, requested by --pipe */ Line 362: if (IN_SET(arg_stdio, ARG_STDIO_DIRECT, ARG_STDIO_AUTO)) /* if --pipe is already used, upgrade to auto mode */ Line 372: arg_stdio = ARG_STDIO_DIRECT; Line 495: arg_wait = true; Line 565: arg_wait = true; Line 575: arg_stdio = isatty(STDIN_FILENO) && isatty(STDOUT_FILENO) && isatty(STDERR_FILENO) ? ...
<path>/home/byk/.local/share/opencode/tool-output/tool_07f2f7f99001iEz7kP59QOFQH9</path>
<type>file</type>
<content>
1280: return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Invalid UUID size, %zu != %zu.", l, sizeof(sd_id128_t));
1281:
1282: memcpy(ret, p, l);
1283: return !sd_id128_is_null(*ret);
1284: }
1285:
1286: static int start_transient_service(sd_bus *bus) {
1287: _cleanup_(sd_bus_message_unrefp) sd_bus_message *m = NULL, *reply = NULL;
1288: _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
1289: _cleanup_(bus_wait_for_jobs_freep) BusWaitForJobs *w = NULL;
1290: _cleanup_free_ char *service = NULL, *pty_path = NULL;
1291: _cleanup_close_ int master = -EBADF;
1292: int r;
1293:
1294: assert(bus);
1295:
1296: if (arg_stdio == ARG_STDIO_PTY) {
1297:
1298: if (arg_transport == BUS_TRANSPORT_LOCAL) {
1299: master = ...
<path>/home/byk/.local/share/opencode/tool-output/tool_07f2f7f99001iEz7kP59QOFQH9</path>
<type>file</type>
<content>
1508: if (c.ip_ingress_bytes != UINT64_MAX)
1509: log_info("IP traffic received: %s", FORMAT_BYTES(c.ip_ingress_bytes));
1510:
1511: if (c.ip_egress_bytes != UINT64_MAX)
1512: log_info("IP traffic sent: %s", FORMAT_BYTES(c.ip_egress_bytes));
1513:
1514: if (c.io_read_bytes != UINT64_MAX)
1515: log_info("IO bytes read: %s", FORMAT_BYTES(c.io_read_bytes));
1516:
1517: if (c.io_write_bytes != UINT64_MAX)
1518: log_info("IO bytes written: %s", FORMAT_BYTES(c.io_write_bytes));
1519: }
1520:
1521: /* Try to propagate the service's return value. But if the service defines
1522: * e.g. ...
SCRIPT(1) User Commands SCRIPT(1)
NAME
script - make typescript of terminal session
SYNOPSIS
script [options] [file]
DESCRIPTION
script makes a typescript of everything on your terminal session. The
terminal data are stored in raw form to the log file and information
about timing to another (optional) structured log file. The timing log
file is necessary to replay the session later by scriptreplay(1) and to
store additional information about the session.
Since version 2.35, script supports multiple streams and allows the
logging of input and output to separate files or all the one file. This
version also supports a new timing file which records additional
information. The command scriptreplay --summary then provides all the
information.
If the argument file or option --log-out file is given, script saves
the dialogue in this file. ...
Failed to connect to bus: No medium found
/* SPDX-License-Identifier: LGPL-2.1-or-later */ #include <sys/eventfd.h> #include <sys/ioctl.h> #include <sys/mount.h> #include <sys/prctl.h> #if HAVE_PAM #include <security/pam_appl.h> #include <security/pam_misc.h> #endif #if HAVE_APPARMOR #include <sys/apparmor.h> #endif #include "sd-messages.h" #if HAVE_APPARMOR #include "apparmor-util.h" #endif #include "argv-util.h" #include "barrier.h" #include "bpf-dlopen.h" #include "bpf-lsm.h" #include "btrfs-util.h" #include "capability-util.h" #include "cgroup-setup.h" #include "chase.h" #include "chattr-util.h" #include "chown-recursive.h" #include "copy.h" #include "data-fd-util.h" #include "env-util.h" #include "escape.h" #include "exec-credential.h" #include "exec-invoke.h" #include "execute.h" #include "exit-status.h" #include "fd-util.h" #include "hexdecoct.h" #include "io-util.h" #include "iovec-util.h" #include "missing_ioprio.h" #include "missing_prctl.h" #include "missing_securebits.h" #include "missing_syscall.h" #include ...
Found 6 matches /home/byk/.local/share/opencode/tool-output/tool_07f30912e001OL7Ji933fqZRJs: Line 1061: static int enforce_user( Line 3234: static int apply_working_directory( Line 4888: /* Ambient capabilities are cleared during setresuid() (in enforce_user()) even with Line 4892: * the inherited set and keep caps has to be set (done in enforce_user()). After setresuid() Line 4915: r = enforce_user(context, uid, capability_ambient_set); Line 4957: r = apply_working_directory(context, params, runtime, home, exit_status);
<path>/home/byk/.local/share/opencode/tool-output/tool_07f30912e001OL7Ji933fqZRJs</path>
<type>file</type>
<content>
4870: }
4871:
4872: /* Save the current bounding set so we can restore it after applying the seccomp
4873: * filter */
4874: saved_bset = bset;
4875: bset |= (UINT64_C(1) << CAP_SYS_ADMIN) |
4876: (UINT64_C(1) << CAP_SETPCAP);
4877: }
4878: #endif
4879:
4880: if (!cap_test_all(bset)) {
4881: r = capability_bounding_set_drop(bset, /* right_now= */ false);
4882: if (r < 0) {
4883: *exit_status = EXIT_CAPABILITIES;
4884: return log_exec_error_errno(context, params, r, "Failed to drop capabilities: %m");
4885: }
4886: }
4887:
4888: ...
/usr/bin/bash: line 1: sysctl: command not found
<path>/proc/sys/kernel/yama/ptrace_scope</path> <type>file</type> <content> 1: 1 (End of file - total 1 lines) </content>
<path>/proc/sys/kernel/unprivileged_userns_clone</path> <type>file</type> <content> 1: 1 (End of file - total 1 lines) </content>
/sys/fs/cgroup/system.slice/opencode.service uid=0 gid=0 mode=755 /sys/fs/cgroup/system.slice/opencode.service/cgroup.procs uid=0 gid=0 mode=644 c4705705dbbf40568cca3ff867754f46
SYSTEMD.KILL(5) systemd.kill SYSTEMD.KILL(5)
NAME
systemd.kill - Process killing procedure configuration
SYNOPSIS
service.service, socket.socket, mount.mount, swap.swap, scope.scope
DESCRIPTION
Unit configuration files for services, sockets, mount points, swap
devices and scopes share a subset of configuration options which define
the killing procedure of processes belonging to the unit.
This man page lists the configuration options shared by these five unit
types. See systemd.unit(5) for the common options shared by all unit
configuration files, and systemd.service(5), systemd.socket(5),
systemd.swap(5), systemd.mount(5) and systemd.scope(5) for more
information on the configuration file options specific to each unit
type. ...
/home/byk/.local/share/opencode-v2-pilot/opencode-v2.service
<path>/home/byk/.local/share/opencode-v2-pilot/opencode-v2.service</path> <type>file</type> <content> 1: [Unit] 2: Description=OpenCode V2 Server 3: After=network.target 4: 5: [Service] 6: Type=simple 7: EnvironmentFile=/home/byk/.opencode/env 8: EnvironmentFile=/home/byk/.local/share/opencode-v2-pilot/server.env 9: Environment=OPENCODE_CONFIG_DIR=/home/byk/.local/share/opencode-v2-pilot/config/opencode 10: Environment=OPENCODE_DB=/home/byk/.local/share/opencode-v2-pilot/data/opencode/opencode.db 11: Environment=XDG_DATA_HOME=/home/byk/.local/share/opencode-v2-pilot/data 12: Environment=XDG_CACHE_HOME=/home/byk/.local/share/opencode-v2-pilot/cache 13: Environment=XDG_CONFIG_HOME=/home/byk/.local/share/opencode-v2-pilot/config 14: Environment=XDG_STATE_HOME=/home/byk/.local/share/opencode-v2-pilot/state 15: User=byk 16: WorkingDirectory=/home/byk 17: ExecCondition=/usr/bin/test -f /etc/opencode/pty-supervisor-verified 18: ...
uid=1000(byk) gid=1000(byk) groups=1000(byk),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),101(lxd),111(docker) /run/dbus/system_bus_socket uid=0 gid=0 mode=666
/var/run/docker.sock type=socket uid=0 gid=111 mode=660 stat: cannot statx '/var/lib/lxd/unix.socket': No such file or directory stat: cannot statx '/var/snap/lxd/common/lxd/unix.socket': No such file or directory
[
{
"content": "Inspect current pilot service, plugin code, host systemd versions, cgroup layout, and applicable local guidance",
"status": "completed",
"priority": "high"
},
{
"content": "Verify systemd-run --pipe behavior and containment/authentication semantics from local docs/source",
"status": "completed",
"priority": "high"
},
{
"content": "Analyze protocol, races, resource bounds, restart behavior, and same-UID impersonation threat",
"status": "completed",
"priority": "high"
},
{
"content": "Produce concrete minimal architecture, commands/properties, risks, and merge verdict",
"status": "in_progress",
"priority": "high"
}
]
[
{
"content": "Inspect current pilot service, plugin code, host systemd versions, cgroup layout, and applicable local guidance",
"status": "completed",
"priority": "high"
},
{
"content": "Verify systemd-run --pipe behavior and containment/authentication semantics from local docs/source",
"status": "completed",
"priority": "high"
},
{
"content": "Analyze protocol, races, resource bounds, restart behavior, and same-UID impersonation threat",
"status": "completed",
"priority": "high"
},
{
"content": "Produce concrete minimal architecture, commands/properties, risks, and merge verdict",
"status": "completed",
"priority": "high"
}
]
Verdict DO-NOT-MERGE the approach exactly as proposed.
systemd-run --pipe can transport interactive byte streams to /usr/bin/script, and KillMode=control-group contains ordinary forks, double-forks, setsid(), and daemonization. However, the proposed authentication and lifecycle are incomplete:
systemd-run process does not reliably stop the transient unit.--wait --collect --quiet does not expose reliable structured signal/timeout status.opencode-v2.service and therefore escape its current 13 GB memory and 4096-task limits.byk belongs to the docker group and can access /var/run/docker.sock. Cgroup containment cannot stop a command from asking Docker to create work elsewhere.A revised version is viable for the pilot after these points are implemented and smoke-tested.
Verified Host State
6.8.0-117-generic255.4-1ubuntu8.17script 2.39.3/run/dbus/system_bus_socketsystemctl --user returns No medium found/system.slice/opencode.serviceopencode-v2.service is not installed/home/byk/.local/share/opencode-v2-pilot/opencode-v2.service runs as byk, with NoNewPrivileges=true, PrivateTmp=yes, MemoryMax=13G, and LimitNPROC=4096ExecCondition=/usr/bin/test -f /etc/opencode/pty-supervisor-verifiedplugins/pty.ts:223-230plugins/pty.ts:556-595Date: Sep 8, 2026 * 🔴 (04:09) User-provided `systemd.kill(5)` documentation stated `KillMode=` accepts `control-group`, `mixed`, `process`, or `none`; defaults to `control-group`; `process` is not recommended and `none` is strongly discouraged because processes may escape unit lifecycle/resource management. * 🔴 (04:09) User-provided `systemd.kill(5)` documented shutdown sequencing: the configur…
Date: Sep 8, 2026 * 🔴 (04:06) User-provided source `/home/byk/.local/share/opencode/tool-output/tool_07f30912e001OL7Ji933fqZRJs` lines 4872-4905 showed capability handling: saves `bset`, adds `CAP_SYS_ADMIN` and `CAP_SETPCAP`, calls `capability_bounding_set_drop(bset, /* right_now= */ false)`, and sets `*exit_status = EXIT_CAPABILITIES` on failure; when `!needs_ambient_hack`, it applies `capabil…
Date: Sep 8, 2026 * 🔴 (04:04) User specified that the child process exit status must always be stored in the typescript file too; `script -e` / `--return` also returns that status, using bash’s signal convention of `128 + signal number`. * 🔴 (04:04) User specified that the inner shell of `script` is always interactive; the `script(1)` documentation warns against running it in non-interactive sh…
* 🔴 (04:03) User directed: “let's use that to name our transient units,” referring to the acquired unique bus name; the inspected `systemd-run` source constructs automatic transient-unit names with `strjoin("run-u", id, ".", unit_type_to_string(t))`. * 🔴 (04:03) User directed: “Make sure to process any TTY events before we process bus events”; the inspected `start_transient_service()` event-loo…
Date: Sep 8, 2026 * 🟡 (04:02) Host details reported: Linux kernel `6.8.0-117-generic` (`#117-Ubuntu SMP PREEMPT_DYNAMIC Tue May 5 19:26:24 UTC 2026`) on `x86_64`; `/usr/bin/script` is from util-linux `2.39.3`. * 🟡 (04:02) Local `systemd-run` supports transient scopes/services and exposes `--wait`, `--collect`, `--unit=UNIT`, `--property=NAME=VALUE`, `--uid=USER`, `--gid=GROUP`, `--working-direc…
Date: Sep 8, 2026 * 🔴 (04:00) User stated the current Node SEA service is intended to run as the system unit `opencode-v2.service` under user `byk`. * 🔴 (04:00) User stated the plugin requires PTY operations: spawn, write, output, kill, and exit. * 🔴 (04:00) User stated in-process child groups are insufficient because descendants can call `setsid` or daemonize. * 🔴 (04:00) User stated the hos…
Date: Sep 8, 2026 * 🔴 (04:02) User stated that `systemd-run --expand-environment=` will be switched to enabled by default for `--scope` in a future release; currently it defaults to enabled except with `--scope`, where it is disabled for backward compatibility. * 🟡 (04:02) `systemd-run` can create transient `.service` or `.scope` units and transient `.path`, `.socket`, or `.timer` units that tr…
Date: Sep 8, 2026 * 🟡 (04:01) System inventory showed 159 loaded systemd units. * 🟡 (04:01) Custom and network-facing services active/running included `opencode.service` (Opencode Server), `light-match.service` (indoor lighting automation), `hostapd@2g.service`, `hostapd@5g.service`, `minidlna.service`, `tailscaled.service`, `ssh.service`, `smbd.service`, `nmbd.service`, `docker.service`, and `…