You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: .agents/skills/remobi-setup/SKILL.md
+171-7Lines changed: 171 additions & 7 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -62,20 +62,43 @@ Note down:
62
62
- Status bar complexity (affects mobile width recommendations)
63
63
- Plugin manager (tpm, etc.)
64
64
65
-
If the user has no tmux config at all, offer to help set up a basic one before continuing.
65
+
If the user has no tmux config at all, read `references/tmux-basics.md` and help them create a starter config:
66
+
- Explain what tmux is and its benefits (persistent sessions, windows/panes, popup tools)
67
+
- Install tmux if missing
68
+
- Create `~/.config/tmux/tmux.conf` with mouse, renumber-windows, true colour, scrollback, vi keys
69
+
- Explain sessions/windows/panes and the essential keybindings
70
+
- Set up a help popup as the first `display-popup` binding: `bind ? display-popup -E -w 80% -h 80% "tmux list-keys | less"` — immediate payoff, no extra tools, teaches the popup concept
71
+
- Suggest `status-position top` (keeps status away from remobi toolbar)
72
+
- Optionally set up tpm for plugin management
73
+
74
+
Only proceed to Phase 3 once the user has a working tmux session.
75
+
76
+
**Detect installed tools** — check for popular tools that work well as tmux popup bindings:
77
+
78
+
```bash
79
+
which lazygit # Git TUI — great as popup
80
+
which yazi # File manager — great as popup
81
+
which btm || which htop # System monitor
82
+
which nvim || which vim # Editor
83
+
which gh # GitHub CLI (gh-dash)
84
+
```
85
+
86
+
Note which tools are installed. In Phase 3, suggest popup bindings for each. In Phase 4, generate matching drawer buttons. If none are installed, suggest lazygit as the most valuable first popup tool.
66
87
67
88
### Phase 3: Interview the user
68
89
69
90
Ask questions **one at a time** — don't dump a list. Adapt based on what you learned in phase 2.
70
91
71
92
1.**What do you primarily use tmux for?** (coding agents, dev workflow, server monitoring, all of the above)
72
93
2.**Do you use popup bindings for tools?** Which ones? (lazygit, yazi, neovim, scratch shell, gh-dash, session picker)
73
-
3.**Do you want touch scrolling?** What strategy? (`wheel` for mouse-event scrolling, `keys` for PageUp/PageDown paging)
74
-
4.**Auto-zoom on mobile?** When you open remobi on your phone, should the current pane zoom to full screen automatically?
75
-
5.**Floating zoom button?** A persistent button overlaid on the terminal for one-tap zoom toggle
76
-
6.**Custom theme or Catppuccin Mocha?** (Catppuccin Mocha is the default and looks great — only ask if the user's tmux theme is clearly different)
8.**Any other tmux bindings you want on your phone?** (This catches anything the inspection missed)
94
+
3.**Detected tools** — "I detected [lazygit/yazi/btm/etc.] on your system. Would you like popup bindings in tmux and matching drawer buttons in remobi for any of these?" Adapt based on Phase 2 detection. For tools not installed, briefly explain what they are and ask if the user wants to install any.
95
+
4.**Custom split bindings?** — Stock tmux uses `%` (vertical) and `"` (horizontal). Some configs remap to `|` and `-`. If custom, the drawer buttons need updated escape codes.
96
+
5.**Do you want touch scrolling?** — `wheel` (default, recommended) sends mouse-wheel events — works in vim, less, htop, and any mouse-aware app. `keys` sends PageUp/PageDown — simpler, works everywhere including plain tmux copy-mode. Which fits your workflow?
97
+
6.**Auto-zoom on mobile?** When you open remobi on your phone, should the current pane zoom to full screen automatically?
98
+
7.**Floating zoom button?** A persistent button overlaid on the terminal for one-tap zoom toggle
99
+
8.**Custom theme or Catppuccin Mocha?** (Catppuccin Mocha is the default and looks great — only ask if the user's tmux theme is clearly different)
10.**Any other tmux bindings you want on your phone?** (This catches anything the inspection missed)
79
102
80
103
Skip questions where you already know the answer from phase 2. Summarise what you've gathered before moving to config generation.
81
104
@@ -130,6 +153,18 @@ Common options:
130
153
-**Cloudflare Tunnel + Access** — private tunnel with Cloudflare Access policies controlling who can connect (e.g. restrict by email, IdP group, device posture). Do not use unauthenticated quick tunnels.
131
154
-**Local network only** — `remobi serve` on localhost behind your own VPN or private network.
132
155
156
+
#### Security hardening
157
+
158
+
remobi hardens the connection even on private networks. Mention these if the user has security concerns:
159
+
160
+
-**Binds `127.0.0.1` only** — never exposed to network without explicit `--host` flag
161
+
-**Content-Security-Policy** — strict default-src, script-src, connect-src scoped to same host
-**Crypto-secure internal port** — ttyd listens on a random ephemeral port (crypto PRNG), never exposed
165
+
-**X-Frame-Options DENY** — prevents clickjacking via iframes
166
+
-**Referrer-Policy: no-referrer** — no URL leaking to external sites
167
+
133
168
For macOS users, mention `--no-sleep` and point to `references/keep-awake.md` for persistent options.
134
169
135
170
For users who want manual ttyd control, point to `references/ttyd-flags.md`.
@@ -141,6 +176,16 @@ Tell the user:
141
176
2. How to start: `remobi serve`
142
177
3. How to access from their phone (URL from deployment choice)
143
178
4. PWA install: on mobile, tap "Add to Home Screen" for a standalone app experience
179
+
5. Built-in mobile controls (these work out of the box, no config needed):
180
+
-**Font size**: `+`/`-` buttons in top-right. Config: `font.mobileSizeDefault` (default 16px), `font.sizeRange` (default [8, 32]), steps by 2
181
+
-**Scroll buttons**: Floating arrow buttons on the sides. Long-press for rapid repeat (300ms delay, 100ms interval). Auto-fade after 2s. Strategy follows `gestures.scroll.strategy` (`wheel` sends mouse events, `keys` sends PageUp/PageDown)
182
+
-**Combo picker**: Modal for arbitrary key combos — type `C-s`, `M-Enter`, `Alt-x`, `C-[`. Supports Ctrl, Alt, Shift modifiers + named keys (PageUp, Escape, etc.). Opened via drawer "Combo" button
183
+
-**Help overlay**: `?` button in top-right. Shows all configured buttons, gestures, and floating buttons in tables. Config-driven, updates when you change buttons
184
+
-**Landscape + keyboard**: When on-screen keyboard opens in landscape, row 2 auto-hides and buttons shrink. No config needed
185
+
6. PWA: enabled by default. On mobile Safari/Chrome, tap Share then "Add to Home Screen" for standalone app experience. Config options:
186
+
-`pwa.enabled` (default `true`) — set `false` to disable manifest + icons
187
+
-`pwa.themeColor` (default `'#1e1e2e'`) — status bar colour on mobile
188
+
-`pwa.shortName` (optional) — short name for home screen icon (falls back to `name`)
|`font.cdnUrl`| jsdelivr nerdfont URL | CSS file for web font |
329
+
|`font.mobileSizeDefault`|`16`| px, applied on mobile |
330
+
|`font.sizeRange`|`[8, 32]`| Min/max for +/- buttons |
331
+
332
+
### PWA
333
+
334
+
| Field | Default | Notes |
335
+
|-------|---------|-------|
336
+
|`pwa.enabled`|`true`| Set `false` to disable manifest + icons |
337
+
|`pwa.themeColor`|`'#1e1e2e'`| Status bar colour on mobile |
338
+
|`pwa.shortName`| (none) | Short name for home screen icon, falls back to `name`|
339
+
340
+
### Hooks (advanced)
341
+
342
+
Hooks are programmatic, not via `defineConfig()`. See `references/hooks.md` if the user asks about analytics, action filtering, or custom DOM. Do not proactively suggest hooks during setup.
343
+
217
344
### Escape-code cheat sheet
218
345
219
346
Use these in `action.data` and gesture `left`/`right` fields:
Lifecycle hooks for remobi. Only reference this if the user asks about analytics, action filtering, custom DOM, or conditional behaviour.
4
+
5
+
## Overview
6
+
7
+
Hooks are registered programmatically — they are not part of `defineConfig()`. Import `createHookRegistry` from `'remobi'` and register handlers. Each hook receives typed context and runs asynchronously. Errors are caught and logged without stopping other hooks.
0 commit comments