# Architecture ``` ┌─────────────────────────────────────────┐ │ sl0ppij │ │ (forked zellij: multiplexer + server) │ │ │ pane frames ───▶│ • per-pane status bar / buttons │ pane finder │ • workspace hints (purpose=) │ layouts │ • responsive + stacked-pane picker │ └───────▲──────────────────────┬───────────┘ │ OSC 5577 │ pane stdin │ (pane → mux) │ (mux → pane) ┌───────┴──────────────────────▼───────────┐ │ pi │ │ (agent process running inside a pane) │ │ + pi-ext extensions (TypeScript) │ └──────────────────────────────────────────┘ ``` ## The two halves **sl0ppij** (`sl0ppij/`) is a fork of zellij. Everything it adds is in commits prefixed `sl0p:`. The parts that matter for integration: - **OSC 5577** — a private escape sequence a pane can emit to draw a status bar *in its own zellij frame*, including clickable buttons whose clicks are reported back on the pane's stdin. Spec: [`sl0ppij/sl0p/pane-status-bar.md`](../sl0ppij/sl0p/pane-status-bar.md). - **Workspace hints** — panes and tabs carry a `purpose=` string so tooling can find "the agent pane" vs "the logs pane". Spec: [`sl0ppij/sl0p/workspace-hints-proposal.md`](../sl0ppij/sl0p/workspace-hints-proposal.md). - **zj-pane-finder** — a fuzzy pane finder plugin (wasm), in-tree at `sl0ppij/sl0p/zj-pane-finder/`, deliberately its own cargo workspace so its size-optimised profile applies. **sl0pstatus** (`sl0pstatus/`) is a fork of `zjstatus`, the status bar the default layout uses in place of zellij's stock tab-bar + status-bar. It is a separate wasm plugin built against the released `zellij-tile`, not part of the sl0ppij workspace. **pi-ext** (`pi-ext/`) is the other end of that protocol: TypeScript extensions loaded by pi. Five of them speak OSC 5577 (`answer-picker`, `last-prompt`, `sl0p-footer`, `slop-tool-boxes`, `user-prompt-frame`). Neither half is much use without the other, which is the entire argument for this monorepo: **the protocol is the product**, and it needs to be versioned and shipped as one thing. ## What the repo holds | path | role | |---|---| | `sl0ppij/` | the fork. Self-contained: rebases against upstream zellij happen here. | | `sl0pstatus/` | forked `zjstatus` status bar (wasm plugin) the default layout depends on. | | `pi-ext/` | pi extensions + `pir` CLI helper. | | `config/` | the opinionated default environment (keybinds, layouts, themes). | | `packaging/` | turn the above into a tarball someone else can install. | | `docs/` | this. | | `FORKS.md` | what upstream everything is based on. | | `VERSION` | the single sl0ppi version. | ## Deliberate non-goals (for now) - Not shipping a forked pi. pi is pinned and redistributed unmodified. - Not supporting anything but `x86_64-unknown-linux-gnu`/`musl`. - No CI. Releases are cut from a dev box until the rest works.