1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
|
# 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.
|