aboutsummaryrefslogtreecommitdiffstats

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.
  • 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.
  • 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.