moshi-best-practices
Moshi Best Practices
Use this skill to make any host feel easy to use from Moshi.
Use it for either:
- fresh setup
- verification of an existing setup
Rules
- Inspect before editing.
- Prefer direct config edits over platform-specific setup scripts.
- Verify every outcome after changing it.
- For
moshi DIR, use a shell function namedmoshi, not a literal alias. Aliases cannot take arguments safely.
1. Host Readiness
Target outcome:
- preferred transport is Mosh plus tmux; fallback is SSH plus tmux
- the host has a working SSH entry point
tmuxis installedmosh-serveris installed when the user wants Mosh, otherwise SSH plus tmux is acceptable- both resolve in the current shell and in the login shell's non-interactive mode
- at least one tmux session exists so the Moshi selector can appear.
Inspect with a small set of real checks. Keep OS-specific mechanics minimal, but do not skip verification.
Useful checks:
command -v tmux || true
command -v mosh-server || true
tmux list-sessions 2>/dev/null || true
LOGIN_SHELL="${SHELL:-/bin/sh}"
"$LOGIN_SHELL" -c 'command -v tmux'
"$LOGIN_SHELL" -c 'command -v mosh-server'
Useful macOS-specific checks when relevant:
dscl . -read "/Users/$USER" UserShell
systemsetup -getremotelogin || true
Verify after changes:
command -v tmux
tmux list-sessions
"$LOGIN_SHELL" -c 'command -v tmux'
"$LOGIN_SHELL" -c 'command -v mosh-server' || true
Then ask the user to reconnect from Moshi. Expected result: the tmux selector appears, and the transport can use Mosh instead of plain SSH when configured.
2. tmux Environment
Use these defaults unless the user wants something different:
set -g history-limit 100000
set -g mouse on
set -g set-titles on
set -g set-titles-string "#I: #W"
set -g base-index 1
setw -g pane-base-index 1
set -g renumber-windows on
Workflow:
- inspect the existing tmux config
- update overlapping settings instead of appending duplicates
- reload tmux after editing
3. tmux Project Session
When creating a new session:
- read the current working directory
- ask one concise question: should the session start from here?
- if the answer is no, ask for the directory
- default the session name to the directory basename
- create the session detached
- use the chosen directory for every initial window with
tmux ... -c <dir>
Recommended windows:
agentreviewtestsserversmisc
Create the session detached and root every initial window at the chosen directory.
Then ask the user to reconnect in Moshi. Expected result: the session is visible in the tmux selector.
4. Optional moshi DIR Helper
Do not install this silently. Ask the user first if they want it.
If yes:
- install a shell function named
moshiin the correct startup file for the active shell - make it accept a directory argument, defaulting to
$PWD - name the tmux session from the directory basename
- create the standard detached session layout only if the session does not already exist
- attach to the session afterward
Use the exact function from references/moshi-shell-function.md.
5. Agent Hooks
Use moshi-hooks, not hand-written config, unless the user explicitly wants manual edits.
Core commands:
bunx moshi-hooks setup
bunx moshi-hooks token <YOUR_TOKEN>
Optional integrations:
bunx moshi-hooks setup --local
bunx moshi-hooks setup .
bunx moshi-hooks setup --codex
bunx moshi-hooks setup --opencode
Final verification:
- run a short real agent task
- confirm Moshi receives a push notification or Live Activity update