From workflow-skills
Set up a 3-pane cmux workspace — lazygit (top-right) for live diffs and yazi (bottom-right) for file navigation. Use at the start of a coding session.
npx claudepluginhub arosenkranz/claude-code-config --plugin workflow-skillsThis skill uses the workspace's default tool permissions.
Sets up a split-pane layout in cmux with lazygit in the top-right pane for live diff tracking and yazi in the bottom-right pane for file navigation, alongside your Claude Code session on the left.
Compares coding agents like Claude Code and Aider on custom YAML-defined codebase tasks using git worktrees, measuring pass rate, cost, time, and consistency.
Designs and optimizes AI agent action spaces, tool definitions, observation formats, error recovery, and context for higher task completion rates.
Designs, implements, and audits WCAG 2.2 AA accessible UIs for Web (ARIA/HTML5), iOS (SwiftUI traits), and Android (Compose semantics). Audits code for compliance gaps.
Sets up a split-pane layout in cmux with lazygit in the top-right pane for live diff tracking and yazi in the bottom-right pane for file navigation, alongside your Claude Code session on the left.
cmux new-split outputs OK surface:N workspace:N. Extract the surface:N token (e.g., surface:3) from the output and remember it for subsequent commands.\n in cmux send to submit the command. Without it, text is typed but not executed.show_hidden already present.echo "${CMUX_WORKSPACE_ID:-NOT_SET}"
If output is NOT_SET, stop and tell Alex: "Not running inside a cmux workspace. Launch Claude Code via cmux to use this skill."
pwd
Remember this path as the project directory. Use it in all subsequent cd and yazi commands.
Create the config directory if it doesn't exist:
mkdir -p ~/.config/yazi
Always write the config (overwrite to ensure correct structure):
printf '[manager]\nshow_hidden = true\n' > ~/.config/yazi/yazi.toml
Verify it was written correctly:
cat ~/.config/yazi/yazi.toml
Expected output:
[manager]
show_hidden = true
If the output doesn't match, warn Alex: "Could not write yazi config — hidden files may not show" and continue.
Get the current (Claude Code) surface identifier:
cmux identify
The output is surface:N workspace:N. Remember the surface:N value — this is the Claude Code surface to preserve.
List all panes in the workspace:
cmux list-panes
For each pane:N token in the output, list its surfaces:
cmux list-pane-surfaces --pane <pane-ref>
Collect every surface:N token returned across all panes. For each surface that is NOT the Claude Code surface identified above, close it:
cmux close-surface --surface <ref>
If close-surface fails for any surface, ignore the error and continue. If no extra surfaces are found across any pane, skip closing and proceed directly to Step 5.
After closing all extra surfaces, wait for cmux to settle:
sleep 0.5
cmux new-split right
Output format: OK surface:N workspace:N. Extract and remember the surface:N value — this is the lazygit surface.
If the command fails or output contains no surface:N, stop and tell Alex: "Failed to create lazygit pane. Check that cmux is running and healthy."
Use the lazygit surface from Step 5. Replace <lazygit-surface> and <project-dir> with the remembered values:
cmux send --surface <lazygit-surface> "cd \"<project-dir>\" && lazygit\n"
Split downward from the lazygit surface to create the yazi pane:
cmux new-split down --surface <lazygit-surface>
Output format: OK surface:N workspace:N. Extract and remember the surface:N value — this is the yazi surface.
If the command fails, warn Alex: "Failed to create yazi pane. Lazygit pane may still be usable." and skip Steps 8–9.
Use the yazi surface from Step 7 and the project directory from Step 2:
cmux send --surface <yazi-surface> "yazi \"<project-dir>\"\n"
sleep 1
cmux read-screen --surface <lazygit-surface>
Inspect the output and handle:
\n to accept default: cmux send --surface <lazygit-surface> "\n"\n to dismiss.brew install lazygit"cmux send --surface <lazygit-surface> "lazygit\n"cmux read-screen --surface <yazi-surface>
Inspect the output and handle:
cmux send --surface <yazi-surface> "yazi\n"brew install yazi"Output the layout summary using the actual surface IDs remembered from earlier steps:
Workspace layout active:
Left → Claude Code session
Top-right → lazygit (surface:N) — live diffs
Bottom-right → yazi (surface:N) — file navigator
lazygit tips:
- Auto-refreshes as agents write code
- j/k or arrow keys to navigate
- space to stage files, c to commit, p to push
- q to quit
yazi tips:
- Arrow keys + Enter to navigate
- . to toggle hidden files
- / to search by filename, S for ripgrep content search, Z for fzf
- Git status indicators shown inline
- q to quit
Debug:
cmux read-screen --surface <lazygit-surface>
cmux read-screen --surface <yazi-surface>
| Condition | Action |
|---|---|
$CMUX_WORKSPACE_ID not set | "Not running inside a cmux workspace. Launch Claude Code via cmux." Stop. |
cmux new-split right fails | "Failed to create lazygit pane. Check cmux is running." Stop. |
No surface:N in split output | "Could not parse surface ID. Expected 'OK surface:N workspace:N'." Stop. |
cmux new-split down fails | "Failed to create yazi pane. Lazygit may still be usable." Continue. |
close-surface fails | Surface already closed or missing. Continue. |
yazi.toml write fails | "Could not write yazi config — hidden files may not show." Continue. |
| No extra surfaces across any pane | Skip cleanup, go straight to Step 5. |
| lazygit shows git-init prompt | Ask Alex: "Init repo here? Reply y or N." |
| lazygit not installed | "Run: brew install lazygit" |
| yazi not installed | "Run: brew install yazi" |
| Terminal too small | Soft warning: "Terminal may be too small for 3 panes. Resize if needed." Continue. |
Use these tools via the Bash tool proactively — all are installed:
| Alex asks... | Claude does... |
|---|---|
| Find a file by name | fzf or rg --files | fzf |
| Find files containing a pattern | rg "<pattern>" --type ts -l |
| Search with context | rg "<pattern>" -C 3 |
| Preview a file | bat <file> |
| Preview a range | bat -r 10:50 <file> |
| Review git changes | git diff | delta |
| Find all usages of X | rg "X" --type ts -n |
| Chain search + preview | rg "X" -l | xargs bat |
These are inline Bash tool calls. The right panes update automatically as you work.