{"id":50759355,"url":"https://github.com/vasic-digital/tmux","last_synced_at":"2026-06-11T08:30:41.844Z","repository":{"id":356488160,"uuid":"1232125455","full_name":"vasic-digital/tmux","owner":"vasic-digital","description":"Optimized + verified containerized tmux build — reproducible across hosts, jemalloc-aware, OOM-protected, 8-test verification gate. Reusable on any Linux system.","archived":false,"fork":false,"pushed_at":"2026-05-26T08:07:33.000Z","size":7836,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-26T09:36:18.240Z","etag":null,"topics":["containerized","custom","hardened","memory-safe","oom","protected","safety","tmux","tmx","tmx-ci","tmx-command"],"latest_commit_sha":null,"homepage":"","language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/vasic-digital.png","metadata":{"files":{"readme":"README.html","changelog":"CHANGELOG.html","contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2026-05-07T16:01:21.000Z","updated_at":"2026-05-26T08:07:01.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/vasic-digital/tmux","commit_stats":null,"previous_names":["vasic-digital/tmux"],"tags_count":10,"template":false,"template_full_name":null,"purl":"pkg:github/vasic-digital/tmux","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vasic-digital%2Ftmux","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vasic-digital%2Ftmux/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vasic-digital%2Ftmux/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vasic-digital%2Ftmux/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/vasic-digital","download_url":"https://codeload.github.com/vasic-digital/tmux/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vasic-digital%2Ftmux/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34190582,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-11T02:00:06.485Z","response_time":57,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["containerized","custom","hardened","memory-safe","oom","protected","safety","tmux","tmx","tmx-ci","tmx-command"],"created_at":"2026-06-11T08:30:39.908Z","updated_at":"2026-06-11T08:30:41.837Z","avatar_url":"https://github.com/vasic-digital.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003c!DOCTYPE html\u003e\n\u003chtml xmlns=\"http://www.w3.org/1999/xhtml\"\u003e\n\u003chead\u003e\n  \u003cmeta charset=\"utf-8\" /\u003e\n  \u003cmeta name=\"generator\" content=\"pandoc\" /\u003e\n  \u003cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, user-scalable=yes\" /\u003e\n  \u003ctitle\u003eREADME\u003c/title\u003e\n  \u003cstyle\u003e\n    /* Default styles provided by pandoc.\n    ** See https://pandoc.org/MANUAL.html#variables-for-html for config info.\n    */\n    html {\n      color: #1a1a1a;\n      background-color: #fdfdfd;\n    }\n    body {\n      margin: 0 auto;\n      max-width: 36em;\n      padding-left: 50px;\n      padding-right: 50px;\n      padding-top: 50px;\n      padding-bottom: 50px;\n      hyphens: auto;\n      overflow-wrap: break-word;\n      text-rendering: optimizeLegibility;\n      font-kerning: normal;\n    }\n    @media (max-width: 600px) {\n      body {\n        font-size: 0.9em;\n        padding: 12px;\n      }\n      h1 {\n        font-size: 1.8em;\n      }\n    }\n    @media print {\n      html {\n        background-color: white;\n      }\n      body {\n        background-color: transparent;\n        color: black;\n        font-size: 12pt;\n      }\n      p, h2, h3 {\n        orphans: 3;\n        widows: 3;\n      }\n      h2, h3, h4 {\n        page-break-after: avoid;\n      }\n    }\n    p {\n      margin: 1em 0;\n    }\n    a {\n      color: #1a1a1a;\n    }\n    a:visited {\n      color: #1a1a1a;\n    }\n    img {\n      max-width: 100%;\n    }\n    svg {\n      height: auto;\n      max-width: 100%;\n    }\n    h1, h2, h3, h4, h5, h6 {\n      margin-top: 1.4em;\n    }\n    h5, h6 {\n      font-size: 1em;\n      font-style: italic;\n    }\n    h6 {\n      font-weight: normal;\n    }\n    ol, ul {\n      padding-left: 1.7em;\n      margin-top: 1em;\n    }\n    li \u003e ol, li \u003e ul {\n      margin-top: 0;\n    }\n    blockquote {\n      margin: 1em 0 1em 1.7em;\n      padding-left: 1em;\n      border-left: 2px solid #e6e6e6;\n      color: #606060;\n    }\n    code {\n      white-space: pre-wrap;\n      font-family: Menlo, Monaco, Consolas, 'Lucida Console', monospace;\n      font-size: 85%;\n      margin: 0;\n      hyphens: manual;\n    }\n    pre {\n      margin: 1em 0;\n      overflow: auto;\n    }\n    pre code {\n      padding: 0;\n      overflow: visible;\n      overflow-wrap: normal;\n    }\n    .sourceCode {\n     background-color: transparent;\n     overflow: visible;\n    }\n    hr {\n      border: none;\n      border-top: 1px solid #1a1a1a;\n      height: 1px;\n      margin: 1em 0;\n    }\n    table {\n      margin: 1em 0;\n      border-collapse: collapse;\n      width: 100%;\n      overflow-x: auto;\n      display: block;\n      font-variant-numeric: lining-nums tabular-nums;\n    }\n    table caption {\n      margin-bottom: 0.75em;\n    }\n    tbody {\n      margin-top: 0.5em;\n      border-top: 1px solid #1a1a1a;\n      border-bottom: 1px solid #1a1a1a;\n    }\n    th {\n      border-top: 1px solid #1a1a1a;\n      padding: 0.25em 0.5em 0.25em 0.5em;\n    }\n    td {\n      padding: 0.125em 0.5em 0.25em 0.5em;\n    }\n    header {\n      margin-bottom: 4em;\n      text-align: center;\n    }\n    #TOC li {\n      list-style: none;\n    }\n    #TOC ul {\n      padding-left: 1.3em;\n    }\n    #TOC \u003e ul {\n      padding-left: 0;\n    }\n    #TOC a:not(:hover) {\n      text-decoration: none;\n    }\n    span.smallcaps{font-variant: small-caps;}\n    div.columns{display: flex; gap: min(4vw, 1.5em);}\n    div.column{flex: auto; overflow-x: auto;}\n    div.hanging-indent{margin-left: 1.5em; text-indent: -1.5em;}\n    /* The extra [class] is a hack that increases specificity enough to\n       override a similar rule in reveal.js */\n    ul.task-list[class]{list-style: none;}\n    ul.task-list li input[type=\"checkbox\"] {\n      font-size: inherit;\n      width: 0.8em;\n      margin: 0 0.8em 0.2em -1.6em;\n      vertical-align: middle;\n    }\n    .display.math{display: block; text-align: center; margin: 0.5rem auto;}\n    /* CSS for syntax highlighting */\n    html { -webkit-text-size-adjust: 100%; }\n    pre \u003e code.sourceCode { white-space: pre; position: relative; }\n    pre \u003e code.sourceCode \u003e span { display: inline-block; line-height: 1.25; }\n    pre \u003e code.sourceCode \u003e span:empty { height: 1.2em; }\n    .sourceCode { overflow: visible; }\n    code.sourceCode \u003e span { color: inherit; text-decoration: inherit; }\n    div.sourceCode { margin: 1em 0; }\n    pre.sourceCode { margin: 0; }\n    @media screen {\n    div.sourceCode { overflow: auto; }\n    }\n    @media print {\n    pre \u003e code.sourceCode { white-space: pre-wrap; }\n    pre \u003e code.sourceCode \u003e span { text-indent: -5em; padding-left: 5em; }\n    }\n    pre.numberSource code\n      { counter-reset: source-line 0; }\n    pre.numberSource code \u003e span\n      { position: relative; left: -4em; counter-increment: source-line; }\n    pre.numberSource code \u003e span \u003e a:first-child::before\n      { content: counter(source-line);\n        position: relative; left: -1em; text-align: right; vertical-align: baseline;\n        border: none; display: inline-block;\n        -webkit-touch-callout: none; -webkit-user-select: none;\n        -khtml-user-select: none; -moz-user-select: none;\n        -ms-user-select: none; user-select: none;\n        padding: 0 4px; width: 4em;\n        color: #aaaaaa;\n      }\n    pre.numberSource { margin-left: 3em; border-left: 1px solid #aaaaaa;  padding-left: 4px; }\n    div.sourceCode\n      {  background-color: #f8f8f8; }\n    @media screen {\n    pre \u003e code.sourceCode \u003e span \u003e a:first-child::before { text-decoration: underline; }\n    }\n    code span.al { color: #ef2929; } /* Alert */\n    code span.an { color: #8f5902; font-weight: bold; font-style: italic; } /* Annotation */\n    code span.at { color: #204a87; } /* Attribute */\n    code span.bn { color: #0000cf; } /* BaseN */\n    code span.cf { color: #204a87; font-weight: bold; } /* ControlFlow */\n    code span.ch { color: #4e9a06; } /* Char */\n    code span.cn { color: #8f5902; } /* Constant */\n    code span.co { color: #8f5902; font-style: italic; } /* Comment */\n    code span.cv { color: #8f5902; font-weight: bold; font-style: italic; } /* CommentVar */\n    code span.do { color: #8f5902; font-weight: bold; font-style: italic; } /* Documentation */\n    code span.dt { color: #204a87; } /* DataType */\n    code span.dv { color: #0000cf; } /* DecVal */\n    code span.er { color: #a40000; font-weight: bold; } /* Error */\n    code span.ex { } /* Extension */\n    code span.fl { color: #0000cf; } /* Float */\n    code span.fu { color: #204a87; font-weight: bold; } /* Function */\n    code span.im { } /* Import */\n    code span.in { color: #8f5902; font-weight: bold; font-style: italic; } /* Information */\n    code span.kw { color: #204a87; font-weight: bold; } /* Keyword */\n    code span.op { color: #ce5c00; font-weight: bold; } /* Operator */\n    code span.ot { color: #8f5902; } /* Other */\n    code span.pp { color: #8f5902; font-style: italic; } /* Preprocessor */\n    code span.sc { color: #ce5c00; font-weight: bold; } /* SpecialChar */\n    code span.ss { color: #4e9a06; } /* SpecialString */\n    code span.st { color: #4e9a06; } /* String */\n    code span.va { color: #000000; } /* Variable */\n    code span.vs { color: #4e9a06; } /* VerbatimString */\n    code span.wa { color: #8f5902; font-weight: bold; font-style: italic; } /* Warning */\n  \u003c/style\u003e\n\u003c/head\u003e\n\u003cbody\u003e\n\u003ch1\nid=\"vasic-digital-tmux--optimized--verified-containerized-build\"\u003evasic-digital\ntmux — optimized + verified containerized build\u003c/h1\u003e\n\u003ch2 id=\"whats-new-in-v1015--v1016-2026-05-28\"\u003eWhat's new in v1.0.15 /\nv1.0.16 (2026-05-28)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eMulti-line copy + paste-IN + Claude Code TUI\nsupport.\u003c/strong\u003e New \u003ccode\u003ebind -n M-MouseDrag1Pane copy-mode -M\u003c/code\u003e\n(Alt-drag, macOS) and \u003ccode\u003ebind -n S-MouseDrag1Pane copy-mode -M\u003c/code\u003e\n(Shift-drag, Linux) force tmux selection even when Claude Code / vim /\nless / htop hold the alt-screen with mouse tracking. New\n\u003ccode\u003e@clip-read\u003c/code\u003e user option + \u003ccode\u003eprefix + P\u003c/code\u003e paste-IN\nbinding pulls the OS clipboard INTO the current pane through\n\u003ccode\u003etmux paste-buffer -p\u003c/code\u003e (bracketed paste). See \u003ca\nhref=\"docs/guides/clipboard.md\"\u003e\u003ccode\u003edocs/guides/clipboard.md\u003c/code\u003e\u003c/a\u003e\nfor the operator recipe.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eWorkable-items SQLite SSoT\n(\u003ccode\u003ecmd/workable-items/\u003c/code\u003e).\u003c/strong\u003e Project- local Go binary\nimplementing the §11.4.93 SQLite single-source-of- truth for every\nworkable item in \u003ccode\u003eIssues.md\u003c/code\u003e / \u003ccode\u003eFixed.md\u003c/code\u003e. Pure-Go\n(no CGO) via \u003ccode\u003emodernc.org/sqlite\u003c/code\u003e. DB at\n\u003ccode\u003edocs/workable_items.db\u003c/code\u003e is \u003cstrong\u003eTRACKED in git per\n§11.4.95\u003c/strong\u003e. See \u003ca\nhref=\"docs/workable-items/README.md\"\u003e\u003ccode\u003edocs/workable-items/README.md\u003c/code\u003e\u003c/a\u003e\nfor the subcommand reference.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eDOCX export on every Markdown sync.\u003c/strong\u003e\n\u003ccode\u003escripts/sync_all_markdown_exports.sh\u003c/code\u003e now produces\n\u003ccode\u003e.docx\u003c/code\u003e siblings alongside the existing \u003ccode\u003e.html\u003c/code\u003e +\n\u003ccode\u003e.pdf\u003c/code\u003e exports — verified across 44 candidate documents with\npandoc-emitted \"Microsoft Word 2007+\" output.\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003cp\u003eA reproducible, hardened build of \u003ca\nhref=\"https://github.com/tmux/tmux\"\u003e\u003ccode\u003etmux\u003c/code\u003e\u003c/a\u003e with built-in\njemalloc support, OOM-protection helper, and a comprehensive\nverification gate. \u003cstrong\u003eRuns natively on any Linux host\u003c/strong\u003e\n(Ubuntu, ALT, Fedora, Arch, openSUSE, Alpine) where podman or docker is\navailable. \u003cstrong\u003emacOS hosts\u003c/strong\u003e (Apple Silicon + Intel) are\nsupported via a transparent bridge into the podman machine VM — the\noperator gets a working \u003ccode\u003etmx\u003c/code\u003e command on the macOS shell with\nno manual SSH-juggling.\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eThe 18 verification tests are why this matters\u003c/strong\u003e: a\ntypical \"build tmux from source\" guide assumes the build worked. This\nproject ships a hard wall — \u003ccode\u003ebash scripts/setup.sh\u003c/code\u003e will\nrefuse to PATH-export the binary unless functional tests pass with\npositive runtime evidence (cgroup interface readbacks,\n\u003ccode\u003e/proc\u003c/code\u003e files, real session output), backed by a §11.4.4\nlayer-4 paired-mutation harness that proves the gates aren't themselves\nbluffs. SKIPs document precondition gates (CAP_SYS_RESOURCE, libjemalloc\npresence, destructive-test opt-in) explicitly. No PASS-bluffs.\u003c/p\u003e\n\u003ch2 id=\"quick-install-one-command\"\u003eQuick install (one command)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eLinux host:\u003c/strong\u003e\u003c/p\u003e\n\u003cdiv class=\"sourceCode\" id=\"cb1\"\u003e\u003cpre\nclass=\"sourceCode bash\"\u003e\u003ccode class=\"sourceCode bash\"\u003e\u003cspan id=\"cb1-1\"\u003e\u003ca href=\"#cb1-1\" aria-hidden=\"true\" tabindex=\"-1\"\u003e\u003c/a\u003e\u003cspan class=\"fu\"\u003egit\u003c/span\u003e clone \u003cspan class=\"at\"\u003e--recurse-submodules\u003c/span\u003e git@github.com:vasic-digital/tmux.git ~/Projects/tmux\u003c/span\u003e\n\u003cspan id=\"cb1-2\"\u003e\u003ca href=\"#cb1-2\" aria-hidden=\"true\" tabindex=\"-1\"\u003e\u003c/a\u003e\u003cspan class=\"bu\"\u003ecd\u003c/span\u003e ~/Projects/tmux\u003c/span\u003e\n\u003cspan id=\"cb1-3\"\u003e\u003ca href=\"#cb1-3\" aria-hidden=\"true\" tabindex=\"-1\"\u003e\u003c/a\u003e\u003cspan class=\"fu\"\u003esudo\u003c/span\u003e bash scripts/install_deps.sh    \u003cspan class=\"co\"\u003e# one-time host build deps\u003c/span\u003e\u003c/span\u003e\n\u003cspan id=\"cb1-4\"\u003e\u003ca href=\"#cb1-4\" aria-hidden=\"true\" tabindex=\"-1\"\u003e\u003c/a\u003e\u003cspan class=\"fu\"\u003ebash\u003c/span\u003e scripts/setup.sh                 \u003cspan class=\"co\"\u003e# build + verify + install (no sudo)\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cp\u003e\u003cstrong\u003emacOS host (Apple Silicon or Intel):\u003c/strong\u003e\u003c/p\u003e\n\u003cdiv class=\"sourceCode\" id=\"cb2\"\u003e\u003cpre\nclass=\"sourceCode bash\"\u003e\u003ccode class=\"sourceCode bash\"\u003e\u003cspan id=\"cb2-1\"\u003e\u003ca href=\"#cb2-1\" aria-hidden=\"true\" tabindex=\"-1\"\u003e\u003c/a\u003e\u003cspan class=\"ex\"\u003ebrew\u003c/span\u003e install podman                   \u003cspan class=\"co\"\u003e# one-time: container runtime\u003c/span\u003e\u003c/span\u003e\n\u003cspan id=\"cb2-2\"\u003e\u003ca href=\"#cb2-2\" aria-hidden=\"true\" tabindex=\"-1\"\u003e\u003c/a\u003e\u003cspan class=\"ex\"\u003epodman\u003c/span\u003e machine init \u003cspan class=\"kw\"\u003e\u0026amp;\u0026amp;\u003c/span\u003e \u003cspan class=\"ex\"\u003epodman\u003c/span\u003e machine start\u003c/span\u003e\n\u003cspan id=\"cb2-3\"\u003e\u003ca href=\"#cb2-3\" aria-hidden=\"true\" tabindex=\"-1\"\u003e\u003c/a\u003e\u003cspan class=\"fu\"\u003egit\u003c/span\u003e clone \u003cspan class=\"at\"\u003e--recurse-submodules\u003c/span\u003e git@github.com:vasic-digital/tmux.git ~/Projects/tmux\u003c/span\u003e\n\u003cspan id=\"cb2-4\"\u003e\u003ca href=\"#cb2-4\" aria-hidden=\"true\" tabindex=\"-1\"\u003e\u003c/a\u003e\u003cspan class=\"bu\"\u003ecd\u003c/span\u003e ~/Projects/tmux\u003c/span\u003e\n\u003cspan id=\"cb2-5\"\u003e\u003ca href=\"#cb2-5\" aria-hidden=\"true\" tabindex=\"-1\"\u003e\u003c/a\u003e\u003cspan class=\"fu\"\u003ebash\u003c/span\u003e scripts/setup.sh                 \u003cspan class=\"co\"\u003e# build + VM-verify + install bridge\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cp\u003eAfter \u003ccode\u003esetup.sh\u003c/code\u003e reports GREEN: open a new shell, or\nsource the rc for your shell (\u003ccode\u003esource ~/.bashrc\u003c/code\u003e or\n\u003ccode\u003esource ~/.zshrc\u003c/code\u003e). Then \u003ccode\u003etmx new|attach|ls|kill\u003c/code\u003e\ninvokes the verified vasic-digital build; the system \u003ccode\u003etmux\u003c/code\u003e\ncommand stays untouched and reachable side-by-side.\u003c/p\u003e\n\u003ch2 id=\"architecture-native-dual-os-per-session-isolation\"\u003eArchitecture\n(native dual-OS per-session isolation)\u003c/h2\u003e\n\u003cpre\u003e\u003ccode\u003e                    ┌────────────────────────────────────┐\n                    │        OPERATOR SHELL              │\n                    │   $ tmx new -s mywork              │\n                    │   $ tmx new -s build  ← own scope! │\n                    └──────────────────┬─────────────────┘\n                                       │\n                                       │  scripts/tmx (host-native, OS-aware dispatch)\n                                       ▼\n            ┌──────────────────────────┴──────────────────────────┐\n            │                                                     │\n       Linux host                                          macOS host (Darwin)\n            │                                                     │\n            │ for each `tmx new -s NAME`:                         │ for each `tmx new -s NAME`:\n            │   systemd-run --user --scope                        │   tmux -L tmx-NAME new-session -d -s NAME \\\n            │     --unit=tmx-NAME.scope                           │     \u0026quot;tmx-rlimit-wrapper.sh \\\n            │     -p MemoryMax=\u0026lt;host-adaptive\u0026gt;                    │       \u0026lt;mem-kb\u0026gt; \u0026lt;cpu-sec\u0026gt; \u0026lt;nproc\u0026gt; \\\n            │     -p CPUQuota=200% -p TasksMax=4096               │       $SHELL -l\u0026quot;\n            │     -p Delegate=yes                                 │   set -g default-command \u0026quot;rlimit-wrapper …\u0026quot;\n            │   tmux -L tmx-NAME new -s NAME -d                   │\n            │                                                     │\n            ▼                                                     ▼\n   ┌─────────────────────────────────┐         ┌──────────────────────────────────────────┐\n   │  cgroup-v2 transient scope      │         │  POSIX rlimit wrapper                    │\n   │  tmx-NAME.scope                 │         │  scripts/tmx-rlimit-wrapper.sh           │\n   │  ├ MemoryMax = host-adaptive    │         │  ├ ulimit -t  ← RLIMIT_CPU   (enforced)  │\n   │  ├ CPUQuota  = 200%             │         │  ├ ulimit -u  ← RLIMIT_NPROC (enforced)  │\n   │  ├ TasksMax  = 4096             │         │  └ ulimit -v  ← RLIMIT_AS NOT enforced   │\n   │  ├ Delegate  = yes              │         │                  by XNU (documented gap) │\n   │  └ tmux 3.6a (Linux ELF)        │         │  tmux 3.6a (Mach-O)                      │\n   │  status-bar = DJB2(host)        │         │  status-bar = DJB2(host)                 │\n   │  oom_score_adj = -500           │         │  (oom_score_adj N/A on Darwin)           │\n   └─────────────────────────────────┘         └──────────────────────────────────────────┘\n       Shell sees the operator\u0026#39;s              Shell sees the operator\u0026#39;s macOS host:\n       Linux host: full FS, full PATH,        full FS, full PATH (Homebrew, system tools,\n       all system binaries reachable.         all Mach-O binaries), `id` = operator\u0026#39;s user.\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003e\u003cstrong\u003eNative dual-OS per-session isolation\u003c/strong\u003e (architecture\nsince 2026-05-13). Each \u003ccode\u003etmx new -s NAME\u003c/code\u003e invocation creates\nits own tmux server (socket \u003ccode\u003etmx-NAME\u003c/code\u003e) with OS-native\nisolation:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eLinux\u003c/strong\u003e — cgroup-v2 transient scope\n\u003ccode\u003etmx-NAME.scope\u003c/code\u003e via \u003ccode\u003esystemd-run --user --scope\u003c/code\u003e.\nKernel enforces MemoryMax, CPUQuota, TasksMax per-group. OOM in one\nsession is contained to that scope — every other session AND\n\u003ccode\u003euser.slice\u003c/code\u003e survive (Constitution §1 invariant).\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003emacOS (Darwin)\u003c/strong\u003e — POSIX rlimit wrapper sets\n\u003ccode\u003eRLIMIT_CPU\u003c/code\u003e (CPU time) and \u003ccode\u003eRLIMIT_NPROC\u003c/code\u003e\n(per-user process count) before exec'ing the operator's\n\u003ccode\u003e$SHELL\u003c/code\u003e. The Darwin XNU kernel enforces these per-process.\nChildren inherit. \u003cstrong\u003e\u003ccode\u003eRLIMIT_AS\u003c/code\u003e (virtual memory) is NOT\nenforced\u003c/strong\u003e by XNU for unprivileged processes — this is a\ndocumented gap; full memory containment on macOS requires launchd jobs\nwith \u003ccode\u003eHardResourceLimits\u003c/code\u003e plist (root). See\n\u003ccode\u003edocs/guide/README.md\u003c/code\u003e §5.6 for the strength comparison.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eBoth OS paths deliver the \u003cstrong\u003esame operator UX\u003c/strong\u003e:\nplain-vanilla tmux behaviour, the operator's shell with full host PATH\n(Homebrew on macOS, /usr/local/bin on Linux, all system tools),\nper-session resource ceilings applied transparently. No VM. No bridge.\nNo \u003ccode\u003ecore@localhost\u003c/code\u003e. No bluff.\u003c/p\u003e\n\u003ch2 id=\"what-you-get\"\u003eWhat you get\u003c/h2\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eComponent\u003c/th\u003e\n\u003cth\u003eWhy\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003etmux 3.6a\u003c/strong\u003e (latest stable)\u003c/td\u003e\n\u003ctd\u003ePinned to a known-good upstream tag\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003eHardened compile flags\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003e-O2 -DNDEBUG -fstack-protector-strong -D_FORTIFY_SOURCE=2\u003c/code\u003e,\nRELRO + immediate-binding link\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003eBuild-time \u003ccode\u003e-ljemalloc\u003c/code\u003e\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003ejemalloc linked at the binary level (more aggressive RAM return than\nglibc malloc)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003eRuntime \u003ccode\u003eLD_PRELOAD=libjemalloc.so\u003c/code\u003e\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003eWrapper preloads jemalloc even on hosts where the linker resolved a\ndifferent malloc\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003eOOM-score protection\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003eOptional setcap-enabled helper (\u003ccode\u003etmx-oom-set\u003c/code\u003e) sets\n\u003ccode\u003eoom_score_adj=-500\u003c/code\u003e on the spawned server, making tmux\nsurvive most OOM cascades\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003eBounded \u003ccode\u003ehistory-limit\u003c/code\u003e\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003eExplicit \u003ccode\u003e2000\u003c/code\u003e (the default — explicit so future bumps\nare intentional)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003ePer-session cwd memory (v1.0.13+)\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003etmx-shell-init.sh\u003c/code\u003e installs a\n\u003ccode\u003ePROMPT_COMMAND\u003c/code\u003e / \u003ccode\u003eprecmd\u003c/code\u003e hook inside every\npane; every command's cwd is recorded to \u003ccode\u003e~/.tmx/state.json\u003c/code\u003e.\nReopen the same session name → wrapper passes\n\u003ccode\u003e-c \u0026lt;last-pwd\u0026gt;\u003c/code\u003e to \u003ccode\u003etmux new-session\u003c/code\u003e; the\npane materialises where you left off. End-to-end guarantee verified by\n\u003ccode\u003escripts/tests/43_e2e_cwd_persist_real_shell.sh\u003c/code\u003e.\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003eHermetic install\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003eBuilt artifact lives in \u003ccode\u003etmux/build/\u003c/code\u003e. PATH export points\nthere; system tmux untouched. Removable via\n\u003ccode\u003ebash scripts/uninstall.sh\u003c/code\u003e (or\n\u003ccode\u003ebash scripts/setup.sh --uninstall\u003c/code\u003e — both delegate to the\nsame single source of truth).\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2 id=\"verification-gate\"\u003eVerification gate\u003c/h2\u003e\n\u003cpre\u003e\u003ccode\u003eSUMMARY: PASS=41  FAIL=0  SKIP=3\nGREEN: tmux binary verified — safe to PATH-export.\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eThe 44 numbered tests cover (among others): smoke + binary version,\nsession lifecycle, jemalloc loaded, history-limit honored, clear-history\nreleases memory, 10 concurrent panes, sustained session no-leak,\nOOM-score wrapper, crash isolation scope (cgroup-v2 transient),\nhostname-derived status-bar colour (algorithm + integration), memory\npressure under cap, TasksMax stress, concurrent OOM independence,\nper-session cgroup distinctness, window-name \u003ccode\u003e.exe\u003c/code\u003e strip,\n\u003cstrong\u003escrollback + copy-mode scrolling\u003c/strong\u003e (operator-path: 3000\nlines generated, proven scrolled off-screen, reachable via copy-mode),\nHelixConstitution inheritance (submodule + every governance doc's\npointer), CodeGraph index materialisation, cross-platform parity\nbranches (macOS ↔︎ Linux), tmx-shell-init non-TTY guard, tmx-state cwd\npersistence end-to-end across exit + reopen, SSH dispatch to remote\nnezha, dispatcher session-name validation, setup install/uninstall E2E,\nand — new in \u003cstrong\u003ev1.0.14\u003c/strong\u003e — \u003cstrong\u003eclipboard copy-OUT\nphysically proven\u003c/strong\u003e end-to-end (test 44: marker round-trip\nthrough \u003ccode\u003ey\u003c/code\u003e keystroke → \u003ccode\u003e@clip\u003c/code\u003e shell-pipe →\n\u003ccode\u003epbpaste\u003c/code\u003e / \u003ccode\u003ewl-paste\u003c/code\u003e / \u003ccode\u003exclip\u003c/code\u003e /\n\u003ccode\u003etermux-clipboard-get\u003c/code\u003e returns the marker).\u003c/p\u003e\n\u003cp\u003eFour honest SKIPs document precondition gates:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003e03_jemalloc_loaded\u003c/code\u003e SKIPs if host doesn't have\nlibjemalloc — \u003ccode\u003esudo bash scripts/install_deps.sh\u003c/code\u003e provides\nit\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003e08_oom_score_adj\u003c/code\u003e SKIPs unless running as root OR the\nsetcap helper is installed —\n\u003ccode\u003esudo bash scripts/build_oom_set.sh --install\u003c/code\u003e enables\nit\u003c/li\u003e\n\u003cli\u003eTests 12 / 13 / 14 (memory-pressure / TasksMax / concurrent-OOM)\nrequire \u003ccode\u003eTMX_TEST_DESTRUCTIVE=1\u003c/code\u003e — run only on dedicated test\nhosts\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eA layer-4 paired-mutation harness (Constitution §103) lives at\n\u003ccode\u003escripts/tests/meta_test_false_positive_proof.sh\u003c/code\u003e: registered\nmutations M1–M14 plus \u003ccode\u003eCM-CONSTITUTION-INHERITANCE\u003c/code\u003e each\nbreak a feature, assert the matching test then FAILs, revert, and assert\nit PASSes again. On macOS the harness reports \u003cstrong\u003e18 caught / 0\nescaped / 6 skipped\u003c/strong\u003e (the 6 SKIPs are Linux-only isolation\nmutations); the remainder run on Linux via\n\u003ccode\u003eMETA=1 bash scripts/test_vm.sh\u003c/code\u003e. The gate is not considered\nself-validating until every runnable mutation is caught.\u003c/p\u003e\n\u003ch2 id=\"roadmap\"\u003eRoadmap\u003c/h2\u003e\n\u003cp\u003eSee \u003ca\nhref=\"docs/plans/containerization.md\"\u003e\u003ccode\u003edocs/plans/containerization.md\u003c/code\u003e\u003c/a\u003e\nfor the \u003cstrong\u003eper-session containerization plan\u003c/strong\u003e — each tmux\nsession running in its own cgroup-bounded container so that:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e2 CPU + reasonable RAM cap per session\u003c/li\u003e\n\u003cli\u003eCrash isolation: if one session OOMs/crashes, only that session\ndies; other sessions and their processes survive\u003c/li\u003e\n\u003cli\u003eOne-command bootstrap: \u003ccode\u003etmx new \u0026lt;session\u0026gt;\u003c/code\u003e\ntransparently creates the container\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"documentation-map\"\u003eDocumentation map\u003c/h2\u003e\n\u003cp\u003eEvery project doc lives under a context-named subdirectory of\n\u003ccode\u003edocs/\u003c/code\u003e per \u003ccode\u003econstitution/Constitution.md\u003c/code\u003e's\nfile-layout rule. Every Markdown has a synced HTML + PDF sibling\ngenerated by \u003ccode\u003escripts/export_docs.sh\u003c/code\u003e per §11.4.65\nuniversal-Markdown-export.\u003c/p\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eArea\u003c/th\u003e\n\u003cth\u003eDoc\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003eOperator guide\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"docs/guide/README.md\"\u003e\u003ccode\u003edocs/guide/README.md\u003c/code\u003e\u003c/a\u003e\n— install, OS-by-OS notes, isolation comparison, troubleshooting\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003ev1.0.14 / v1.0.15 clipboard\u003c/td\u003e\n\u003ctd\u003e\u003ca\nhref=\"docs/guides/clipboard.md\"\u003e\u003ccode\u003edocs/guides/clipboard.md\u003c/code\u003e\u003c/a\u003e\n— multi-line copy + paste-IN + Alt/Shift-drag inside Claude Code\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003ev1.0.15 workable-items SSoT\u003c/td\u003e\n\u003ctd\u003e\u003ca\nhref=\"docs/workable-items/README.md\"\u003e\u003ccode\u003edocs/workable-items/README.md\u003c/code\u003e\u003c/a\u003e\n— \u003ccode\u003ecmd/workable-items/\u003c/code\u003e Go binary, subcommand reference,\nhonest gaps\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003ev1.0.9 shell-session resume\u003c/td\u003e\n\u003ctd\u003e\u003ca\nhref=\"docs/manual/tmx-shell-integration.md\"\u003e\u003ccode\u003edocs/manual/tmx-shell-integration.md\u003c/code\u003e\u003c/a\u003e\n— end-user master manual with copy-paste worked examples\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003ev1.0.9 shell integration\u003c/td\u003e\n\u003ctd\u003e\u003ca\nhref=\"docs/guides/tmx-shell-integration.md\"\u003e\u003ccode\u003edocs/guides/tmx-shell-integration.md\u003c/code\u003e\u003c/a\u003e\n— operator install/uninstall guide for\n\u003ccode\u003etmx-shell-init.sh\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003ev1.0.9 state daemon\u003c/td\u003e\n\u003ctd\u003e\u003ca\nhref=\"docs/guides/tmx-state.md\"\u003e\u003ccode\u003edocs/guides/tmx-state.md\u003c/code\u003e\u003c/a\u003e\n— operator CLI reference + state-file schema for\n\u003ccode\u003etmx-state\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003ev1.0.9 SSH dispatch\u003c/td\u003e\n\u003ctd\u003e\u003ca\nhref=\"docs/guides/tmx-ssh-dispatch.md\"\u003e\u003ccode\u003edocs/guides/tmx-ssh-dispatch.md\u003c/code\u003e\u003c/a\u003e\n— \u003ccode\u003essh \u0026lt;host\u0026gt;-tmx \u0026lt;session\u0026gt;\u003c/code\u003e install, security,\ntroubleshooting\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eScrolling (Claude Code TUI + mobile)\u003c/td\u003e\n\u003ctd\u003e\u003ca\nhref=\"docs/scrolling/README.md\"\u003e\u003ccode\u003edocs/scrolling/README.md\u003c/code\u003e\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eCodeGraph (§11.4.78)\u003c/td\u003e\n\u003ctd\u003e\u003ca\nhref=\"docs/codegraph/README.md\"\u003e\u003ccode\u003edocs/codegraph/README.md\u003c/code\u003e\u003c/a\u003e\n— install, per-agent MCP wiring, anti-bluff verification\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eArchitecture plans\u003c/td\u003e\n\u003ctd\u003e\u003ca\nhref=\"docs/plans/native-dual-os.md\"\u003e\u003ccode\u003edocs/plans/native-dual-os.md\u003c/code\u003e\u003c/a\u003e\n— current native-host design (no VM)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ca\nhref=\"docs/plans/per-session-isolation.md\"\u003e\u003ccode\u003edocs/plans/per-session-isolation.md\u003c/code\u003e\u003c/a\u003e\n— per-session OOM containment\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ca\nhref=\"docs/plans/containerization.md\"\u003e\u003ccode\u003edocs/plans/containerization.md\u003c/code\u003e\u003c/a\u003e\n— original (now superseded) containerization plan\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eCycle plans\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"docs/plans/v1.0.4.md\"\u003e\u003ccode\u003edocs/plans/v1.0.4.md\u003c/code\u003e\u003c/a\u003e\n— this cycle's plan (CodeGraph + covenant propagation + AUDIT\nfixes)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eResearch notes\u003c/td\u003e\n\u003ctd\u003e\u003ca\nhref=\"docs/research/customization/colors.md\"\u003e\u003ccode\u003edocs/research/customization/colors.md\u003c/code\u003e\u003c/a\u003e\n— hostname-derived status colour\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eGovernance\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"Constitution.md\"\u003e\u003ccode\u003eConstitution.md\u003c/code\u003e\u003c/a\u003e — Project\nArticles §101–§109 (extends \u003ccode\u003econstitution/\u003c/code\u003e); \u003ca\nhref=\"CLAUDE.md\"\u003e\u003ccode\u003eCLAUDE.md\u003c/code\u003e\u003c/a\u003e, \u003ca\nhref=\"AGENTS.md\"\u003e\u003ccode\u003eAGENTS.md\u003c/code\u003e\u003c/a\u003e, \u003ca\nhref=\"QWEN.md\"\u003e\u003ccode\u003eQWEN.md\u003c/code\u003e\u003c/a\u003e — per-agent inheritance pointers\n+ project-specific overlay\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eUniversal governance\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"constitution/\"\u003e\u003ccode\u003econstitution/\u003c/code\u003e\u003c/a\u003e submodule\n(\u003ccode\u003eHelixDevelopment/HelixConstitution\u003c/code\u003e, pinned\n\u003ccode\u003e7f738df\u003c/code\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eLive state\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"CONTINUATION.md\"\u003e\u003ccode\u003eCONTINUATION.md\u003c/code\u003e\u003c/a\u003e — read\nfirst on a fresh conversation\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eTracker\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"Issues.md\"\u003e\u003ccode\u003eIssues.md\u003c/code\u003e\u003c/a\u003e (open) / \u003ca\nhref=\"Fixed.md\"\u003e\u003ccode\u003eFixed.md\u003c/code\u003e\u003c/a\u003e (closed with closure SHA +\nevidence)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eChangelog\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"CHANGELOG.md\"\u003e\u003ccode\u003eCHANGELOG.md\u003c/code\u003e\u003c/a\u003e — per-release\npositive-evidence verification record\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2 id=\"repository-conventions\"\u003eRepository conventions\u003c/h2\u003e\n\u003cp\u003eThis repo follows the \u003cstrong\u003evasic-digital anti-bluff\ncovenant\u003c/strong\u003e: every test that PASSes carries positive evidence of\nthe feature working; every SKIP documents its precondition; every gate\nhas a paired mutation in \u003ccode\u003emeta_test_*.sh\u003c/code\u003e proving the gate\nisn't itself a bluff. The covenant is restated verbatim in\n\u003ccode\u003eConstitution.md\u003c/code\u003e, \u003ccode\u003eCLAUDE.md\u003c/code\u003e,\n\u003ccode\u003eAGENTS.md\u003c/code\u003e, and \u003ccode\u003eQWEN.md\u003c/code\u003e (per the 2026-05-21\noperator mandate) so that any tool which doesn't expand\n\u003ccode\u003e@imports\u003c/code\u003e still reads it. The upstream source lives in \u003ca\nhref=\"constitution/Constitution.md\"\u003e\u003ccode\u003econstitution/Constitution.md\u003c/code\u003e\u003c/a\u003e\n§11.4.\u003c/p\u003e\n\u003ch2 id=\"codegraph-code-intelligence\"\u003eCodeGraph (code-intelligence)\u003c/h2\u003e\n\u003cp\u003eThis project is wired with \u003ca\nhref=\"https://github.com/colbymchenry/codegraph\"\u003eCodeGraph\u003c/a\u003e per\n\u003ccode\u003econstitution/Constitution.md\u003c/code\u003e §11.4.78. The MCP server is\nconfigured for Claude Code, OpenCode, Kimi CLI, Crush, and Qwen Code —\nsee \u003ca\nhref=\"docs/codegraph/README.md\"\u003e\u003ccode\u003edocs/codegraph/README.md\u003c/code\u003e\u003c/a\u003e\nfor the install + per-agent wiring contract.\u003c/p\u003e\n\u003ch2 id=\"license\"\u003eLicense\u003c/h2\u003e\n\u003cp\u003eApache 2.0 — see \u003ccode\u003eLICENSE\u003c/code\u003e.\u003c/p\u003e\n\u003c/body\u003e\n\u003c/html\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvasic-digital%2Ftmux","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fvasic-digital%2Ftmux","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvasic-digital%2Ftmux/lists"}