Survey Report: Zellij as Terminal Workspace Multiplexer for Miadi / Hermes Navigator
Date: 2026-05-17
Primary issue: jgwill/Miadi#334
Related: jgwill/Miadi#265
PDE: ae6a72fd-7057-43c7-b1fe-e02bfe45c3ca
Research method: local code survey + official documentation fetches + GitHub repository inspection + academic context scan
Decision status: conditional accept as an optional Hermes Navigator scene backend, not as a replacement for Navigator’s SQLite scene model or the broader tmux substrate.
Executive Summary
WIKI-READY
Zellij is materially stronger than Tmuxinator for Hermes Navigator because it already exposes a machine-oriented CLI control surface, headless/background session creation, KDL workspace layouts, structured JSON inspection, and built-in session resurrection. Those capabilities map well onto hnavig scene activate and hnavig scene resume, especially for terminal-first workflows on SSH-accessed hosts such as gaia, as, and eury.
The important boundary is that Zellij should be adopted as a runtime backend for scene launch, not as the new system of record. Hermes Navigator’s SQLite scene model still carries issue_ref, project_id, context_snapshot_id, and Miadi-specific traceability that Zellij does not model. Also, Zellij would only replace a narrow layer first: the repo still has broader tmux coupling in focus.py, terminal_inventory.py, terminal_send.py, approval_queue.py, context_engine.py, and universe_detector.py.
SPEC-CANDIDATE
- Keep
SceneStore/NamedSessionSQLite as the control plane. - Add
zellijas an optional terminal backend forscene activate/scene resume. - Treat KDL layouts as Hermes workspace-profile artifacts, analogous to but more capable than Tmuxinator YAML.
- Keep the multi-host strategy host-local: one Zellij session per machine (
gaia,as,eury), not one shared session across separate servers. - Defer any full tmux-to-Zellij migration outside the scene-launch layer to a separate issue/spec wave.
1. Zellij Doc Survey
PROVENANCE
The following official sources were fetched and inspected:
| Source | What it proved |
|---|---|
https://zellij.dev/documentation/ | Official user-guide entry points for CLI control, layouts, and plugins |
https://zellij.dev/documentation/layouts.html | Layouts are text files; applied with zellij --layout; KDL is the layout language |
https://zellij.dev/documentation/creating-a-layout.html | KDL supports panes, tabs, cwd, command, args, edit, floating panes, templates |
https://zellij.dev/documentation/plugins.html | Zellij has a WebAssembly/WASI plugin system; built-in UI is plugin-based |
https://zellij.dev/documentation/plugin-dev-env | Official example of a KDL dev workspace with pane edit, pane command, and plugin location=... |
https://zellij.dev/documentation/controlling-zellij-through-cli.html | External control is through CLI commands that can target any session on the machine |
https://zellij.dev/documentation/programmatic-control.html | Strongest proof for machine control: subprocess-oriented CLI surface, JSON output, headless session creation |
https://zellij.dev/documentation/zellij-run-and-edit.html | run and edit can create panes and launch commands/files |
https://zellij.dev/documentation/cli-recipes.html | Background sessions, pane/tab IDs, JSON inspection, subscription, scripted workflows |
https://zellij.dev/documentation/session-resurrection.html | Built-in session serialization and resurrection into human-readable KDL layouts |
https://zellij.dev/tutorials/layouts/ | Tutorial evidence that layouts can encode repeatable developer workspaces |
zellij-org/zellij root README.md, Cargo.toml, docs/ARCHITECTURE.md | Rust workspace structure, crate boundaries, plugin crates, architecture terminology |
Key technical findings
PROVENANCE
- Rust core / workspace architecture is real and explicit. The upstream
Cargo.tomllistszellij-client,zellij-server,zellij-utils,zellij-tile, and multiple default plugins in a single Cargo workspace. This validates a Rust-native architecture rather than a shell-script wrapper around tmux. - The plugin model is WebAssembly/WASI-based. Official plugin docs state: “Zellij offers a Webassembly / WASI plugin system,” and note that the built-in UI itself is plugin-driven. This matters because Hermes Navigator can initially ignore plugins, but the plugin surface gives Zellij a real extension story beyond static pane scripting.
- KDL is the layout/config language. The official layouts docs explicitly say “Zellij uses KDL as its configuration language.” That means workspace profiles can be materialized as KDL files rather than YAML.
- Layouts are richer than Tmuxinator-style project launchers. The KDL schema supports panes, tabs, floating panes,
cwd, command panes, editor panes, templates, named tabs, and remote layout URLs. Tmuxinator YAML is primarily a tmux session initializer; Zellij KDL is a first-class runtime layout language. - There is no documented Python API. The strongest official statement comes from the programmatic-control page: “No socket, HTTP API, or library binding is required - all interaction occurs through subprocess invocation, and structured data is available as JSON on stdout.” For Hermes Navigator, that is actually a good fit because current tmux integrations are already
subprocess.run(...)based. - Zellij has first-class machine control, not just human keyboard UX. Official docs show
zellij action list-panes --json,list-tabs --json,dump-screen,subscribe --format json,attach --create-background, and blocking pane primitives. That is materially more automation-friendly than a pure Tmuxinator-style “generate and attach” model. - Zellij supports headless/background sessions directly. Official docs show
zellij attach --create-background my-sessionand thenzellij --session my-session action .... This is important forgaia,as, andeury, where Hermes Navigator often acts over SSH and may need terminal state without a desktop. - Built-in session resurrection is real but local. Official session-resurrection docs say sessions are serialized to the user cache folder, saved every second as human-readable KDL layouts, and can be resurrected after quit/crash. This is useful, but it is still host-local cache state rather than Hermes-managed SQLite provenance.
- Commands in resurrected or remote layouts are intentionally gated. Docs note that remote layouts suspend commands behind a “Waiting to run” banner, and resurrected commands sit behind a press-ENTER banner unless
--force-run-commandsis used. This aligns well with Miadi’s HITL discipline. - Sessions are machine-scoped. The CLI docs say commands can target any session “running on the machine.” That means the natural operational unit is one host-local Zellij daemon/session space per server, not one magical cross-host shared session spanning
gaia,as, andeury.
What this means for Hermes Navigator
WIKI-READY
Zellij is not merely “a prettier tmux.” The official docs show a proper terminal workspace runtime with declarative layouts, observable pane state, headless startup, structured JSON inspection, and built-in session persistence. For Hermes Navigator this matters because the product question is not whether Zellij can replace tmux attach; it is whether it can act as a better terminal workspace substrate for scene activate and scene resume without collapsing Navigator’s own control-plane metadata.
SPEC-CANDIDATE
- Use Zellij’s CLI/JSON surface from Python; do not seek a Python SDK that does not exist.
- Materialize Navigator workspace profiles as generated KDL files.
- Preserve Miadi metadata in SQLite and treat Zellij session restore as runtime convenience, not authoritative persistence.
2. Hermes Navigator Capability Map
PROVENANCE
Local files inspected:
/usr/local/src/ironsilk/runtime/hermes-navigator/hermes_navigator/tmux_session.py/usr/local/src/ironsilk/runtime/hermes-navigator/hermes_navigator/scene.py/usr/local/src/ironsilk/runtime/hermes-navigator/hermes_navigator/cli.py(scenecommands)- broader tmux grep across
runtime/hermes-navigator/hermes_navigator/
Local capability map
| File / function | Current role | Direct tmux / subprocess behavior | Zellij-relevant observation |
|---|---|---|---|
tmux_session.py:66-77 tmux_session_exists() | tmux session existence guard | subprocess.run(["tmux", "has-session", ...]) | Natural parallel would be zellij list-sessions / attach probes |
tmux_session.py:80-105 build_named_tmux_session_plan() | Builds create/attach/switch tmux command plan | No execution, but emits tmux new-session, attach, switch-client commands | This is the strongest design template for a future zellij_session.py helper |
tmux_session.py:108-123 execute_named_tmux_new() | Creates named tmux session | Executes tmux new-session -d -s ... | Headless zellij attach --create-background <name> is the analogous call |
tmux_session.py:125-133 execute_named_tmux_attach() | Attaches or switches into session | Executes tmux switch-client or tmux attach | Zellij analogue would be zellij attach <name>; switching semantics differ |
scene.py:99-173 SceneStore.activate_scene() | Persists scene metadata in SQLite | No tmux call | Control-plane source of truth already exists and should remain |
scene.py:235-265 SceneStore.resume_scene() | Marks stored scene active again | No tmux call | Resume semantics already separated from launch mechanics |
scene.py:344-355 SceneLauncher.launch() | Executes scene windows | Iterates window specs and delegates to _open() | Primary injection point for a Zellij backend |
scene.py:369-383 _open_terminal() | Opens terminal emulator window | subprocess.Popen([...]) to terminator, konsole, xterm, etc. | Main place to replace desktop-terminal spawning with Zellij session/pane creation |
scene.py:385-396 _open_editor() | Opens GUI editor | `subprocess.Popen(["code" | "kate" |
scene.py:398-408 _open_browser() | Opens browser URL | subprocess.Popen(["xdg-open", url]) | Probably stays external in v1; Zellij is terminal-native, not a browser manager |
cli.py:1711-1777 scene activate | Persists scene, optionally launches windows | Calls SceneStore.activate_scene() then SceneLauncher.launch() when --launch | Best CLI surface for adding --backend zellij |
cli.py:1819-1856 scene resume | Loads scene, optionally relaunches windows | Calls SceneStore.resume_scene() then SceneLauncher.launch() | Same backend switch applies here |
All immediate Zellij integration points in the requested scene path
PROVENANCE
The requested code path reveals four concrete integration points:
- Named session helper layer —
tmux_session.pycan be mirrored aszellij_session.pywith plan/build/execute helpers. - Scene launch dispatch —
SceneLauncher.launch()is the narrow point where current desktop terminal spawning can become backend-aware. - CLI launch semantics —
hnavig scene activate --launchandhnavig scene resume --launchare already the operator-facing verbs; no new top-level command is required. - Persistent scene metadata —
SceneStorealready stores the non-runtime metadata that Zellij does not know about.
Broader tmux substrate note
PROVENANCE
A repo-wide grep showed additional tmux subprocess use outside the requested files, including:
focus.py(tmux select-pane)terminal_inventory.py(list-panes,capture-pane,attach,switch-client)terminal_send.py(send-keys)approval_queue.py(send-keys)context_engine.py(capture-pane,list-panes)universe_detector.py(display-message,show-environment,list-panes)
This matters because a Zellij-backed scene feature would be incremental, not a global substrate swap.
WIKI-READY
Hermes Navigator already has the right architectural split for a Zellij experiment: SQLite persistence is separate from launch execution, and the CLI already expresses scene lifecycle clearly. The real engineering question is not whether SceneStore should change very much; it is whether SceneLauncher should learn a terminal backend abstraction.
SPEC-CANDIDATE
- Introduce a
terminal_backendchoice at launch time. - Keep
SceneStorestable; only extend it with optional runtime metadata if needed. - Explicitly document that scene-level Zellij adoption does not retire the broader tmux substrate yet.
3. Fit Assessment
Main comparison matrix
| Dimension | Plain tmux subprocess | Current hnavig scene activate | Zellij backend for hnavig scenes | Tmuxinator YAML |
|---|---|---|---|---|
| Control language | imperative shell / subprocess | Python + SQLite + desktop app spawning | Python + SQLite + Zellij CLI/JSON + KDL | YAML -> tmux |
| Existing Hermes integration | already used in runtime | native | strong potential | external |
| Declarative workspace profile | weak | weak-moderate | strong via KDL | moderate via YAML |
| Headless server mode | yes | poor (desktop-window bias) | strong (attach --create-background) | moderate (still tmux-oriented) |
| Structured inspection | limited | none for launched windows | strong (list-panes --json, subscribe, dump-screen) | weak |
| Persistence / restore | external if built | SQLite scenes only | Zellij resurrection + SQLite provenance | tmux session only |
| Plugin/extension model | none | none | WASM plugin system available | none |
| GUI editor/browser launching | manual | strong today | mixed / needs policy | weak |
| Best fit for SSH hosts | good | weak today | good | moderate |
| Best fit for Miadi traceability | weak | strong | strong if SQLite retained | weak |
| Cross-host shared state | no | no | no (host-local unless custom overlay) | no |
| Complexity to adopt | low | already present | moderate | moderate-high |
Zellij vs current scene.py
PROVENANCE
scene.pytoday is explicitly a desktop-window launcher: terminal emulator + GUI editor + browser.- Zellij is explicitly a terminal workspace runtime with headless/background/session control.
That creates a shape mismatch and a fit opportunity.
Where Zellij is better
WIKI-READY
- Server / SSH ergonomics: Zellij is better suited than the current desktop-window launcher for hosts where the session should survive disconnects and be reattached later.
- Profile expressiveness: KDL layouts are a better replacement for Tmuxinator YAML than ad hoc Python window lists because they naturally express tabs, panes, commands, focus, and
cwdcomposition. - Automation surface: Zellij exposes actionable JSON and streaming output primitives, which means Hermes Navigator can observe and react to panes instead of just launching them.
- HITL safety: suspended commands and resurrection banners align with Miadi’s approval-sensitive posture.
Where current hnavig is still better
WIKI-READY
- Issue/spec/context metadata:
SceneStorealready tracks Miadi-owned fields that Zellij does not track. - External application launching: opening
code,kate,gedit, or browser tabs is simpler in currentscene.pythan in a pure Zellij world. - Repository-native traceability: SQLite scene records can be linked to issue refs, snapshots, and future rispecs; Zellij’s cache cannot.
Why this is different from the Tmuxinator survey
WIKI-READY
The Tmuxinator survey ended in rejection because Tmuxinator would mainly duplicate hnavig behavior while adding a Ruby runtime. Zellij is different: it brings a real runtime surface that Hermes Navigator does not currently have — headless sessions, KDL layouts, JSON inspection, pane subscriptions, and built-in resurrection. That makes Zellij a plausible backend, not merely an optional export format.
Net fit judgment
SPEC-CANDIDATE
- Accept conditionally for terminal-first scenes.
- Reject as a full replacement for SQLite scene persistence.
- Reject for now as a full-system tmux replacement across all Hermes Navigator modules.
4. Extension Contract: Zellij-backed hnavig scene
4.1 What calls in scene.py would change
SPEC-CANDIDATE
Add a backend abstraction at the launcher boundary:
SceneLauncher.launch(scene)gainsbackend: Literal["desktop", "zellij"]or reads from config._open_terminal()is replaced by_open_terminal_desktop()+_open_terminal_zellij()._open_editor()becomes policy-based:- file target ->
zellij edit <file>or KDLpane edit="..." - directory target / GUI-editor intent -> keep existing external editor path in v1
- file target ->
_open_browser()remains external by default (xdg-open) even in Zellij mode, because browser launch is outside Zellij’s core substrate.cli.pyscene verbs gain--backend desktop|zellijand possibly--zellij-layout <path>for explicit overrides.- Optional schema extension in
SceneStore:runtime_backend,runtime_session_name,runtime_layout_path.
4.2 Proposed launch flow
SPEC-CANDIDATE
hnavig scene activate <path> --backend zellij --launch
SceneStore.activate_scene(...)persists Miadi metadata as today.- A scene-to-KDL renderer materializes a deterministic layout file from the scene window list and profile.
- Hermes launches a host-local Zellij session:
- headless:
zellij attach --create-background <session> options --default-layout <layout.kdl> - interactive:
zellij --layout <layout.kdl> --session <session>orzellij attach <session>depending on context
- headless:
- If the scene contains browser/reference URLs, Hermes may still call
xdg-openoutside Zellij. - Resume path prefers
zellij attach <session>and only regenerates layout if the session is missing.
4.3 Standard Miadi workspace KDL template
SPEC-CANDIDATE
layout {
tab name="workspace" cwd="/usr/local/src/ironsilk" focus=true {
pane split_direction="vertical" {
pane name="shell"
pane split_direction="horizontal" {
pane command="git" {
cwd "."
args "status" "--short"
start_suspended true
}
pane command="bash" {
cwd "."
args "-lc" "python -m pytest -q || true"
start_suspended true
}
}
}
}
tab name="reference" cwd="/usr/local/src/ironsilk" {
pane command="bash" {
cwd "."
args "-lc" "sed -n '1,220p' README.md"
start_suspended true
}
pane command="bash" {
cwd "."
args "-lc" "sed -n '1,220p' rispecs/hermes-agent-runtime/00-hermes-agent-runtime-master.spec.md"
start_suspended true
}
}
}
WIKI-READY
This is not meant to replace every desktop affordance. It shows the right contract shape: one reproducible, host-local terminal workspace profile that Hermes can generate from scene metadata, while keeping non-terminal launches optional and explicit.
4.4 Multi-host branch strategy applicability
PROVENANCE
Miadi’s branch discipline already says:
gaia-> host-local branchas-> consolidatoreury-> host-local branch
Official Zellij docs describe sessions as machine-scoped and controllable on the machine.
SPEC-CANDIDATE
- Do not treat one Zellij session as spanning
gaia,as, andeurysimultaneously. - Instead create one session namespace per host, e.g.:
miadi-gaia-<scene>miadi-as-<scene>miadi-eury-<scene>
- A human may SSH into
gaiaand attach tomiadi-gaia-*; that is still a host-local session, not a distributed shared session. - If a later spec wants cross-host synchronized panes or collaboration, that is a separate distributed-systems problem and should not be smuggled into the scene-launch contract.
5. Recommendation
Decision
SPEC-CANDIDATE
Conditional accept. Adopt Zellij as an optional Hermes Navigator scene-launch backend for terminal-first workspaces, while keeping SQLite SceneStore / NamedSession as the authoritative control plane.
Why this is the right boundary
WIKI-READY
This gives Hermes Navigator a better runtime for SSH-friendly, persistent, profile-driven terminal work without losing Miadi-owned metadata, issue traceability, or snapshot semantics. It also avoids the category error of treating Zellij’s host-local cache as if it were a replacement for Navigator’s product-level model.
Implementation gap estimate
| Slice | Estimated LOC | Estimated effort |
|---|---|---|
| Backend flag + config plumbing | 30-50 LOC | 0.5 day |
zellij_session.py helper (plan/create/attach) | 70-100 LOC | 1 day |
| Scene -> KDL renderer | 80-130 LOC | 1-1.5 days |
SceneLauncher backend dispatch + editor/browser policy | 60-100 LOC | 1 day |
| CLI/reporting/tests/docs | 50-90 LOC | 1-1.5 days |
| Total practical integration | 290-470 LOC | 3.5-5.5 days |
Recommendation wording for issue / spec promotion
WIKI-READY
- Accept Zellij as a backend, not as the new source of truth.
- Do not deprecate tmux globally in this wave.
- Do not attempt cross-host shared Zellij sessions in v1.
- Use KDL layouts as workspace-profile materialization for terminal-first scenes.
6. HITL Ambiguities
PROVENANCE
- Editor policy ambiguity: Should a Zellij-backed scene optimize for terminal editors (
vim,helix,nvim) or keep launching GUI editors externally whentargetis a directory? - Browser/reference policy ambiguity: Should URLs stay external via
xdg-open, or should Hermes render reference work as terminal command panes instead? - Session ownership ambiguity: When both Zellij resurrection and Hermes SQLite know about “the same” scene, which layer wins during conflicts?
- Backend selection ambiguity: Should
zellijbe opt-in per command, per scene profile, or a machine default? - Broader migration ambiguity: Is the desired work limited to
scene activate/resume, or should later waves port focus, inventory, and send-keys semantics away from tmux too?
WIKI-READY
These are implementation-policy questions, not blockers to the survey result. They matter because Zellij is good enough to justify a backend experiment, but not self-explanatory enough to remove human design choices around GUI apps, resurrection precedence, and scope.
7. Academic Context
Relevant fields
WIKI-READY
| Field | Why it matters for this survey |
|---|---|
| Systems programming | Zellij is a Rust-native terminal runtime with client/server crate boundaries |
| Terminal UX / programmer tools HCI | The adoption question is about workspace friction, context recovery, pane management, and operator flow |
| WASM sandboxing / extensibility | Zellij’s plugin system uses WebAssembly/WASI and changes the extension surface compared with tmux/Tmuxinator |
| Empirical software engineering / DevOps | Hermes Navigator scenes are reproducible environment artifacts, similar to release/configuration engineering concerns |
| Distributed systems for multi-host work | The gaia / as / eury question is fundamentally about machine locality, state ownership, and session coordination |
Relevant authors / works
PROVENANCE
- Programmer tools / developer workflow
- Brad A. Myers et al., Programmers are Users Too — developer tools as HCI objects.
- Andrew J. Ko, work on the future of programming in HCI.
- Martin P. Robillard, software comprehension and API/tool usability.
- Empirical SE / DevOps / configuration
- Bram Adams, release engineering and software analytics.
- Foutse Khomh, software quality and trustworthy software systems.
- Weiyi Shang, log engineering / observability.
- AI agent / runtime control
- John Yang et al., SWE-agent / Agent-Computer Interfaces.
- Shunyu Yao et al., ReAct.
- WASM / sandboxing context
- WebAssembly/WASI literature on safe extension and portable sandboxed execution is directly relevant to Zellij plugin architecture.
Montreal researchers relevant to this survey
PROVENANCE
- Martin Robillard (McGill) — software comprehension, API use, developer-facing software design. Strong fit for evaluating whether Zellij’s control model reduces workspace friction for humans.
- Jeremy Cooperstock (McGill) — human-computer interaction and multimodal interfaces. Useful lens for terminal UX and workflow ergonomics.
- Bettina Kemme (McGill) — distributed information systems. Strong fit for reasoning about machine-scoped sessions, replication boundaries, and multi-host state.
- Foutse Khomh (Polytechnique Montréal) — software engineering, trustworthy systems, AI/software quality. Relevant to evaluating operational risk in backend substitution.
- Weiyi Shang (Concordia) — log engineering, performance engineering, AIOps. Relevant because Hermes Navigator already treats terminal state and logs as operational evidence.
- Joëlle Pineau (McGill / Mila) — AI systems, reproducibility, and experimental rigor. Useful for the agent-runtime and evaluation angle.
Thesis director suggestion
SPEC-CANDIDATE
Primary thesis director suggestion: Martin Robillard (McGill), with Bettina Kemme (McGill) or Foutse Khomh (Polytechnique Montréal) as an ideal co-supervision direction depending on emphasis.
- Choose Robillard if the thesis emphasis is developer-tool UX, workspace comprehension, and API/control-surface design.
- Choose Kemme if the emphasis shifts toward machine locality, host/session coordination, and distributed state.
- Choose Khomh if the emphasis is reproducibility, runtime engineering quality, and AI/software operations.
Researchable thesis framing
WIKI-READY
A defensible thesis topic here would be: “Terminal Workspace Runtimes as Agent-Computer Interfaces: Comparing declarative layout systems, host-local persistence, and orchestration metadata in multi-host software engineering workflows.” Zellij gives the systems/WASM/runtime side; Hermes Navigator gives the orchestration, traceability, and HITL side.
8. Promotion Map
SPEC-promotable (ready or nearly ready for rispecs/hermes-navigator/)
SPEC-CANDIDATE
- Hermes Navigator should treat terminal runtime selection as a backend concern, not as scene identity.
- Zellij can be added as an optional backend for
scene activate/scene resume. - SQLite
SceneStore/NamedSessionremains authoritative for Miadi metadata. - Multi-host strategy remains host-local: one session namespace per machine.
- KDL layouts are the right profile materialization format for a Zellij-backed scene.
Keep as provenance
PROVENANCE
- Exact fetched doc URLs, quoted wording, and current upstream implementation details.
- Broader grep evidence of tmux usage across other Hermes Navigator modules.
- Current upstream Zellij version/workspace structure as observed in fetched
Cargo.tomland repo listing. - The specific LOC/day estimate, which should be revalidated before implementation.
Promote to wiki prose
WIKI-READY
- Zellij is a good optional backend because it combines headless sessions, KDL layouts, JSON inspection, and session resurrection.
- Zellij does not replace Hermes Navigator’s scene database.
- A single Zellij session should not be treated as spanning
gaia,as, andeury; use per-host sessions.
9. Sources
Local code / repo sources
/usr/local/src/ironsilk/runtime/hermes-navigator/hermes_navigator/tmux_session.py/usr/local/src/ironsilk/runtime/hermes-navigator/hermes_navigator/scene.py/usr/local/src/ironsilk/runtime/hermes-navigator/hermes_navigator/cli.py/usr/local/src/ironsilk/runtime/hermes-navigator/hermes_navigator/models.pyhttps://github.com/jgwill/Miadi/issues/334https://github.com/jgwill/Miadi/issues/265
Official Zellij sources
- https://zellij.dev/documentation/
- https://zellij.dev/documentation/layouts.html
- https://zellij.dev/documentation/creating-a-layout.html
- https://zellij.dev/documentation/plugins.html
- https://zellij.dev/documentation/plugin-dev-env
- https://zellij.dev/documentation/controlling-zellij-through-cli.html
- https://zellij.dev/documentation/programmatic-control.html
- https://zellij.dev/documentation/zellij-run-and-edit.html
- https://zellij.dev/documentation/cli-recipes.html
- https://zellij.dev/documentation/session-resurrection.html
- https://zellij.dev/tutorials/layouts/
- https://github.com/zellij-org/zellij
- https://github.com/zellij-org/zellij/blob/main/docs/ARCHITECTURE.md
Academic / researcher sources
- https://www.cs.mcgill.ca/~martin/
- https://www.mcgill.ca/ece/jeremy-cooperstock
- https://www.cs.mcgill.ca/~kemme/
- https://www.polymtl.ca/expertises/en/khomh-foutse
- https://www.concordia.ca/faculty/weiyi-shang.html
- https://mila.quebec/en/directory/joelle-pineau
- https://www.cs.mcgill.ca/~prakash/
- https://ieeexplore.ieee.org/abstract/document/7503516/
- https://doi.org/10.48550/arXiv.2405.15793
- https://doi.org/10.48550/arXiv.2210.03629
Final survey verdict
SPEC-CANDIDATE
Zellij is the first surveyed tool that is strong enough to justify a real Hermes Navigator integration path. The correct move is not “replace Navigator with Zellij” and not “replace tmux everywhere immediately”; it is to add Zellij as an optional scene backend that preserves SQLite provenance, embraces KDL workspace profiles, and stays host-local across gaia, as, and eury.