Zellij Skill Expansion Implementation Plan
For Claude: REQUIRED SUB-SKILL: Use superpowers:executing-plans to implement this plan task-by-task.
Goal: Rewrite zellij-tab-pane skill into zellij skill covering 7 domains (~48 unique commands) of zellij 0.44, replacing the current 4-mode structure.
Architecture: Single mega-skill with domain-based sections. Decision tree at top routes to correct section. Error diagnostics at bottom with three templates (session-required action, session-required top-level, standalone top-level).
Tech Stack: Markdown (SKILL.md), YAML frontmatter, bash code blocks
Key simplification: write-chars completely eliminated from skill and commands. All modes use new-tab -- CMD (verified on zellij 0.44). write-chars not documented at all — if Claude needs to type into existing pane, it can use send-keys.
Quoting caveat: For Claude session prompts with special characters (quotes, $, backticks), use an intermediate script via bash -c or mktemp. Simple prompts work directly.
Timeout policy: timeout 5 removed from all commands. Rationale: new-tab -- CMD is non-blocking (returns immediately after creating tab), unlike the old write-chars chain that could hang mid-sequence. Top-level commands (list-sessions, attach) are also fast. If a command hangs, the user can Ctrl+C — an explicit timeout adds complexity without benefit for non-blocking operations.
Error handling convention: Three templates based on command type:
zellij action ... and session-required top-level (zellij run, zellij edit) -> check $ZELLIJ
- Standalone top-level (
list-sessions, attach, kill-session, delete-session) -> no $ZELLIJ check
- All use
_rc=$? immediately after || to preserve the original exit code
Domain-specific checks (e.g. command -v start-issue, command -v claude) go in elif branches where relevant. No command -v zellij check — if the command ran and failed, zellij is in PATH.
Task 1: Rename skill directory and write complete SKILL.md
Files:
- Rename:
zellij-workflow/skills/zellij-tab-pane/ -> zellij-workflow/skills/zellij/
- Create:
zellij-workflow/skills/zellij/SKILL.md (full rewrite)
Step 1: Rename directory
git mv zellij-workflow/skills/zellij-tab-pane zellij-workflow/skills/zellij
Note: git mv preserves history and stages the rename automatically. The existing TRIGGER_EXAMPLES.md is carried over by the rename — Task 3 overwrites it with the expanded version.
Step 2: Write YAML frontmatter
---
name: zellij
description: |
**UNIVERSAL TRIGGER**: Any action IN zellij terminal multiplexer.
7 domains: sessions, tabs, panes, floating/fullscreen, layout, edit, input/output.
Examples: "open new tab", "list sessions", "close pane", "toggle floating",
"dump layout", "edit file.rs", "send ctrl+c to pane",
"открой вкладку", "список сессий", "закрой панель", "плавающие панели",
"сохрани layout", "редактировать файл", "отправь ctrl+c"
TRIGGERS: zellij, zellij tab, zellij pane, zellij session,
zellij multiplexer, terminal multiplexer,
floating pane, fullscreen, layout,
вкладка zellij, панель zellij, сессия zellij, плавающ, раскладка,
мультиплексер, терминальный мультиплексер,
open tab, new tab, new pane, list sessions, switch session,
close tab, close pane, rename pane, rename tab,
toggle floating, dump layout, edit file in zellij, send keys,
resize pane, move focus, go to tab, attach session, kill session,
открой вкладку, новая панель, список сессий, закрой вкладку,
закрой панель, переименуй вкладку, подключись к сессии
allowed-tools: Bash
---
Step 3: Write Decision Tree
# Zellij Skill
Manage zellij terminal multiplexer: sessions, tabs, panes, layouts, and more.
## Decision Tree
Request -> identify domain:
session/сессия -> Sessions
tab/вкладка + create/open/run/claude/issue -> Tabs: Create
tab/вкладка + list/show/info -> Tabs: Query
tab/вкладка + go-to/switch/next/prev -> Tabs: Navigate
tab/вкладка + close/rename/move -> Tabs: Manage
pane/панель + create/open/run -> Panes: Create
pane/панель + list/show -> Panes: Query
pane/панель + close/rename/move/resize/focus -> Panes: Manage
floating/fullscreen/плавающ -> Floating & Fullscreen
layout/раскладка -> Layout
edit/редакт + file -> Edit (NB: `zellij edit`, not `zellij action`)
send-keys/paste/dump-screen/clear -> Input/Output
**Ambiguity rules:**
- Creates something new -> Create (even "open floating pane" -> Panes: Create with -f)
- Toggles visibility -> Floating & Fullscreen
- Moves focus -> Navigate
Step 4: Write Sessions section
Two groups: commands that work anywhere vs commands requiring active session.
## Sessions
### Works anywhere (no active session required)
**List sessions:**
zellij list-sessions # table with status
zellij list-sessions -s # names only
zellij list-sessions -n # no colors (for parsing)
**Attach to session:**
zellij attach SESSION_NAME
zellij attach -c SESSION_NAME # create if not exists
zellij attach -b SESSION_NAME # create detached in background
**Kill session:**
zellij kill-session TARGET
zellij kill-all-sessions
**Delete session (remove saved state):**
zellij delete-session TARGET
zellij delete-session -f TARGET # kill first if running
zellij delete-all-sessions
### Requires active session
**Switch session:**
zellij action switch-session NAME
zellij action switch-session NAME --cwd /path --layout LAYOUT # verify flags on 0.44
**Rename current session:**
zellij action rename-session NEW_NAME
Step 5: Write Tabs section
Subsections: Create, Query, Navigate, Manage.
Key: new-tab -- CMD replaces write-chars hack for all modes.
NOTE on code format: Commands in SKILL.md should be in ```bash ``` code blocks (matching current SKILL.md style), not plain text. The plan shows them inline for brevity.
## Tabs
### Create tab
**Empty tab:**
zellij action new-tab --name "$NAME"
**Tab with shell command:**
zellij action new-tab --name "$NAME" -- $CMD
zellij action new-tab --name "$NAME" --cwd /path -- $CMD
zellij action new-tab --name "$NAME" --close-on-exit -- $CMD
**Tab with Claude session:**
Simple prompt (no special characters):
zellij action new-tab --name "$NAME" --cwd "$PROJECT_DIR" -- claude --dangerously-skip-permissions "$PROMPT"
Complex prompt (quotes, $, backticks):
SCRIPT=$(mktemp /tmp/claude-tab-XXXXXX.sh)
cat > "$SCRIPT" << 'SCRIPT_EOF'
#!/bin/bash
exec claude --dangerously-skip-permissions '<PROMPT with escaped single quotes>'
SCRIPT_EOF
chmod +x "$SCRIPT"
zellij action new-tab --name "$NAME" --cwd "$PROJECT_DIR" -- bash "$SCRIPT"
Tab name: from context (1-2 words, max 20 chars). Has issue -> `#123`. Has plan -> `plan-audit`. General -> `refactor`. Fallback -> `claude-HH:MM`.
**Tab with GitHub issue:**
zellij action new-tab --name "#$NUMBER" -- start-issue $NUMBER
Issue formats: `123`, `#123`, `https://github.com/owner/repo/issues/123`
**Tab with layout:**
zellij action new-tab --layout /path/to/layout.kdl --name "$NAME"
### Query tabs
zellij action list-tabs # table format
zellij action list-tabs --json # JSON
zellij action query-tab-names # tab names (verify on 0.44)
### Navigate tabs
zellij action go-to-tab-name NAME
zellij action go-to-tab-name NAME --create # create if missing (verify flag)
zellij action go-to-tab INDEX # by 1-based index
zellij action go-to-next-tab
zellij action go-to-previous-tab
### Manage tabs
zellij action close-tab # close current
zellij action rename-tab NEW_NAME # rename current
zellij action undo-rename-tab
zellij action move-tab left|right
zellij action toggle-active-sync-tab # broadcast input to all panes
NOTE: Verify on 0.44: close-tab-by-id, rename-tab-by-id may not exist. If absent, omit.
Step 6: Write Panes section
## Panes
### Create pane
zellij action new-pane # auto-placed
zellij action new-pane -d right|down # directional (verify -d flag)
zellij action new-pane -f # floating
zellij action new-pane -f --width 50% --height 50% # sized floating
zellij action new-pane -f --pinned # always on top (verify flag)
zellij action new-pane -i # in-place (suspends current)
zellij action new-pane --stacked # stacked (verify flag)
zellij action new-pane -n "name" -- CMD # with command
zellij action new-pane --cwd /path -- CMD # with cwd
**Shorthand (zellij run):**
zellij run -- CMD # new pane with command
zellij run -f -- CMD # floating
zellij run -i -- CMD # in-place
zellij run -n "name" --cwd /path -- CMD # named, with cwd
zellij run -c -- CMD # close on exit
zellij run -s -- CMD # start suspended (verify flag)
zellij run --block-until-exit -- CMD # block caller until command finishes (verify flag)
### Query panes
zellij action list-panes # table
zellij action list-panes --json # JSON (includes command, geometry, state, tab)
NOTE: `list-panes --json` returns all fields at once. No per-field filters exist.
### Manage panes
zellij action close-pane
zellij action rename-pane NEW_NAME
zellij action undo-rename-pane
zellij action move-focus right|left|up|down
zellij action focus-next-pane
zellij action focus-previous-pane
zellij action move-pane [right|left|up|down]
zellij action move-pane-backwards
zellij action resize increase|decrease [right|left|up|down]
NOTE: Verify on 0.44 before including:
zellij action stack-panes -- terminal_1 terminal_2 plugin_3 (syntax may differ)
zellij action set-pane-color ... (args may be positional, not --bg/--fg)
zellij action change-floating-pane-coordinates ... (verify arg names)
Step 7: Write Floating & Fullscreen section
## Floating and Fullscreen
zellij action toggle-floating-panes # toggle all floating in tab
zellij action show-floating-panes # show (exit 2 if already visible)
zellij action show-floating-panes --tab-id ID # in specific tab
zellij action hide-floating-panes # hide (exit 2 if already hidden)
zellij action hide-floating-panes --tab-id ID
zellij action toggle-pane-embed-or-floating # convert focused pane
zellij action toggle-pane-pinned # pin/unpin floating pane
zellij action toggle-fullscreen # fullscreen focused pane
NOTE: `change-floating-pane-coordinates` — verify exact arg names on 0.44 before including.
Step 8: Write Layout section
## Layout
### Save current layout
zellij action dump-layout # to stdout
zellij action dump-layout > layout.kdl # to file (relative to CWD)
### Apply layout
zellij action override-layout /path/to/layout.kdl
zellij action override-layout /path/to/layout.kdl --apply-only-to-active-tab # verify flag
zellij action override-layout /path/to/layout.kdl --retain-existing-terminal-panes # verify flag
zellij action override-layout /path/to/layout.kdl --retain-existing-plugin-panes # verify flag
### Cycle swap layouts
zellij action next-swap-layout
zellij action previous-swap-layout
Step 9: Write Edit section
## Edit
### Open file in $EDITOR pane
zellij edit /path/to/file.rs # new pane
zellij edit /path/to/file.rs -l 42 # at line 42
zellij edit /path/to/file.rs -f # floating
zellij edit /path/to/file.rs -i # in-place
zellij edit /path/to/file.rs -f --width 80% --height 80%
zellij edit /path/to/file.rs --cwd /project
### Edit scrollback
zellij action edit-scrollback # open pane scrollback in $EDITOR
Step 10: Write Input/Output section
## Input/Output
### Send keys to pane
zellij action send-keys "Ctrl c" # to focused pane
zellij action send-keys -p terminal_1 "Ctrl c" # to specific pane
zellij action send-keys "Alt Shift b" # modifier combos
zellij action send-keys "F1" # function keys
### Paste
zellij action paste # bracketed paste from clipboard
### Dump screen
zellij action dump-screen /path/to/output.txt # viewport only
zellij action dump-screen -f /path/to/output.txt # with full scrollback
### Clear
zellij action clear # clear focused pane buffers
Step 11: Write Examples section
10 examples covering all 7 domains (at least one per domain):
## Examples
### List sessions
User: "show zellij sessions"
zellij list-sessions -s
### Attach to session
User: "attach to zellij session dev"
zellij attach dev
### Run command in new tab
User: "run npm test in new tab"
zellij action new-tab --name "npm-test" -- npm test
### Navigate to tab
User: "go to tab api"
zellij action go-to-tab-name api
### Edit file at line
User: "open src/main.rs at line 42 in zellij"
zellij edit src/main.rs -l 42
### Query panes as JSON
User: "show all panes with their commands"
zellij action list-panes --json
### Floating pane with command
User: "run htop in floating pane"
zellij run -f -n "htop" -- htop
### Toggle floating panes
User: "toggle floating panes"
zellij action toggle-floating-panes
### Save layout to file
User: "save current zellij layout"
zellij action dump-layout > layout.kdl
### Send Ctrl+C to specific pane
User: "send ctrl+c to pane terminal_3"
zellij action send-keys -p terminal_3 "Ctrl c"
Step 12: Write Error Diagnostics and Dependencies
Three error templates based on command type:
## Error Diagnostics
### For `zellij action` commands (require active session)
command || {
_rc=$?
if [ -z "$ZELLIJ" ]; then echo "Not in zellij session"
else echo "Exit code: $_rc"
fi
}
### For session-required top-level commands (`zellij run`, `zellij edit`)
Same template as `zellij action` -- these are top-level but still need an active session.
command || {
_rc=$?
if [ -z "$ZELLIJ" ]; then echo "Not in zellij session"
else echo "Exit code: $_rc"
fi
}
### For standalone top-level commands (list-sessions, attach, kill-session, delete-session)
No $ZELLIJ check needed -- these work outside zellij.
command || { _rc=$?; echo "Failed (exit code: $_rc)"; }
| Error | Cause | Solution |
|-|-|-|
| Not in zellij session | Running outside zellij | Start zellij first |
| claude not found | CLI not in PATH | Install Claude Code |
| start-issue not found | Script not in PATH | Install or add to PATH |
| exit code 2 (show/hide) | Already in target state | Not an error, ignore |
## Dependencies
- **zellij 0.44+** (terminal multiplexer)
- **claude CLI** (for Claude session tabs only)
- **start-issue** (for GitHub issue tabs only)
- **$EDITOR / $VISUAL** (for `zellij edit` only)
## Important
- `zellij action` commands work only inside zellij session
- Top-level commands (list-sessions, attach, kill/delete) work anywhere
- `new-tab -- CMD` provides full TTY -- interactive commands work
- Pane stays in "held" state after command exits (press Enter to close)
- Use `--close-on-exit` to auto-close pane when command finishes
- For Claude prompts with special characters, use mktemp script instead of inline quoting
Step 13: Update README.md
Replace zellij-tab-pane with zellij in zellij-workflow/README.md (skill name and path references).
Step 14: Commit
git add zellij-workflow/skills/ zellij-workflow/README.md
git commit -m "Add zellij mega-skill: rewrite zellij-tab-pane as 7-domain skill
BREAKING: skill renamed zellij-tab-pane -> zellij
BREAKING: write-chars hack replaced with new-tab -- CMD (zellij 0.44)
New domains: sessions, floating/fullscreen, layout, edit, input/output
Existing domains expanded: tabs (query, navigate, manage), panes (query, manage)"
Task 2: Update slash commands to use new-tab -- CMD
Files:
- Modify:
zellij-workflow/commands/start-issue-in-new-tab.md
- Modify:
zellij-workflow/commands/run-in-new-tab.md
Step 1: Rewrite start-issue-in-new-tab.md
Keep "### 1. Parse issue number" section unchanged. Replace "### 2. Create tab and launch start-issue" — write-chars hack with new-tab -- CMD:
### 2. Create tab and launch start-issue
**In a new tab (default):**
zellij action new-tab --name "#${ISSUE_NUMBER}" -- start-issue $ISSUE_NUMBER || {
_rc=$?
if [ -z "$ZELLIJ" ]; then echo "Not in zellij session"
elif ! command -v start-issue &>/dev/null; then echo "start-issue not found in PATH"
else echo "Exit code: $_rc"
fi
}
**In a new pane:**
zellij run -- start-issue $ISSUE_NUMBER || {
_rc=$?
if [ -z "$ZELLIJ" ]; then echo "Not in zellij session"
elif ! command -v start-issue &>/dev/null; then echo "start-issue not found in PATH"
else echo "Exit code: $_rc"
fi
}
Remove: sleep 0.3, write-chars, timeout 5.
Step 2: Rewrite run-in-new-tab.md
Replace write-chars hack with new-tab -- CMD. Use --cwd instead of cd in script.
For simple prompts:
zellij action new-tab --name "$TAB_NAME" --cwd "$PROJECT_DIR" -- claude --dangerously-skip-permissions "$PROMPT" || {
_rc=$?
if [ -z "$ZELLIJ" ]; then echo "Not in zellij session"
elif ! command -v claude &>/dev/null; then echo "claude not found in PATH"
else echo "Exit code: $_rc"
fi
}
For complex prompts (keep mktemp script but without cd):
SCRIPT=$(mktemp /tmp/claude-tab-XXXXXX.sh)
cat > "$SCRIPT" << 'SCRIPT_EOF'
#!/bin/bash
exec claude --dangerously-skip-permissions '<PROMPT>'
SCRIPT_EOF
chmod +x "$SCRIPT"
zellij action new-tab --name "$TAB_NAME" --cwd "$PROJECT_DIR" -- bash "$SCRIPT" || {
_rc=$?
if [ -z "$ZELLIJ" ]; then echo "Not in zellij session"
elif ! command -v claude &>/dev/null; then echo "claude not found in PATH"
else echo "Exit code: $_rc"
fi
}
In a new pane (simple prompt):
zellij run -- claude --dangerously-skip-permissions "$PROMPT" || {
_rc=$?
if [ -z "$ZELLIJ" ]; then echo "Not in zellij session"
elif ! command -v claude &>/dev/null; then echo "claude not found in PATH"
else echo "Exit code: $_rc"
fi
}
In a new pane (complex prompt):
zellij run -- bash "$SCRIPT" || {
_rc=$?
if [ -z "$ZELLIJ" ]; then echo "Not in zellij session"
elif ! command -v claude &>/dev/null; then echo "claude not found in PATH"
else echo "Exit code: $_rc"
fi
}
Remove: sleep 0.3, write-chars, timeout 5, cd in script, clear+echo preamble.
Bump command versions: 1.0.0 -> 2.0.0.
Step 3: Commit
git add zellij-workflow/commands/
git commit -m "Update zellij commands: use new-tab -- CMD, remove write-chars"
Task 3: Create TRIGGER_EXAMPLES.md
Files:
- Create:
zellij-workflow/skills/zellij/TRIGGER_EXAMPLES.md
Step 1: Write trigger examples
Minimum 54 positive (6 per domain x 9 categories), 10 negative. EN + RU.
Categories:
Sessions (6):
- "list zellij sessions" / "список сессий zellij"
- "switch to session dev" / "переключись на сессию dev"
- "kill session test" / "убей сессию test"
- "show active zellij sessions" / "покажи активные сессии"
- "attach to session main" / "подключись к сессии main"
- "rename zellij session" / "переименуй сессию"
Tabs - Create (6):
- "open new tab" / "открой новую вкладку"
- "run npm test in new tab" / "запусти npm test в новой вкладке"
- "start issue #45 in tab" / "стартани issue #45 в вкладке"
- "delegate refactoring to new tab" / "делегируй рефакторинг в вкладку"
- "execute plan in tab" / "запусти план в вкладке"
- "open tab with layout" / "открой вкладку с layout"
Tabs - Query/Navigate/Manage (6):
- "list zellij tabs" / "покажи вкладки"
- "go to tab api" / "перейди на вкладку api"
- "close current tab" / "закрой вкладку"
- "rename tab to dev" / "переименуй вкладку в dev"
- "next tab" / "следующая вкладка"
- "move tab left" / "сдвинь вкладку влево"
Panes - Create (6):
- "open new pane" / "открой панель"
- "run htop in floating pane" / "запусти htop в плавающей панели"
- "open pane to the right" / "открой панель справа"
- "run tests in pane below" / "запусти тесты в панели снизу"
- "open pane in-place" / "открой панель вместо текущей"
- "create stacked pane" / "создай stacked панель"
Panes - Query/Manage (6):
- "list panes as json" / "покажи панели в json"
- "resize pane right" / "увеличь панель вправо"
- "close pane" / "закрой панель"
- "move focus down" / "переключи фокус вниз"
- "rename pane to logs" / "переименуй панель в logs"
- "stack these panes" / "объедини панели в стек"
Floating/Fullscreen (6):
- "toggle floating panes" / "переключи плавающие панели"
- "fullscreen this pane" / "на весь экран"
- "pin floating pane" / "закрепи плавающую панель"
- "show floating panes" / "покажи плавающие панели"
- "hide floating panes" / "скрой плавающие панели"
- "make pane floating" / "сделай панель плавающей"
Layout (6):
- "dump current layout" / "сохрани раскладку"
- "apply layout from file" / "примени layout из файла"
- "next swap layout" / "следующий layout"
- "save layout to file" / "экспортируй layout"
- "override layout keeping existing panes" / "примени layout с сохранением панелей"
- "previous swap layout" / "предыдущий layout"
Edit (6):
- "edit file.rs in zellij" / "открой file.rs в редакторе"
- "open scrollback" / "открой скроллбэк"
- "edit src/main.rs at line 42" / "редактируй main.rs строка 42"
- "open file in floating editor" / "открой файл в плавающем редакторе"
- "edit file in-place" / "редактируй файл вместо текущей панели"
- "open config.yaml in zellij editor" / "открой config.yaml в редакторе zellij"
Input/Output (6):
- "send ctrl+c to pane" / "отправь ctrl+c в панель"
- "dump screen to file" / "сдампь экран в файл"
- "clear pane" / "очисти панель"
- "paste text into pane" / "вставь текст в панель"
- "send F1 to pane" / "отправь F1 в панель"
- "dump screen with full scrollback" / "сдампь экран со всем скроллбэком"
Negative (10):
- "install zellij"
- "configure zellij keybindings"
- "zellij vs tmux"
- "what is zellij"
- "zellij plugin development"
- "zellij config file location"
- "update zellij to latest version"
- "compile zellij from source"
- "zellij keyboard shortcuts"
- "zellij color scheme"
Step 2: Commit
git add zellij-workflow/skills/zellij/TRIGGER_EXAMPLES.md
git commit -m "Add zellij TRIGGER_EXAMPLES.md: 54+ examples across 7 domains"
Task 4: Run quality check and bump version
Files:
- Modify:
zellij-workflow/.claude-plugin/plugin.json (version 1.4.3 -> 2.0.0)
Step 1: Run skill quality review
./scripts/review_skill_triggers.sh zellij-workflow/zellij
Expected: score >= 75/100. If below, fix description/examples and re-run.
Step 2: Bump version
In plugin.json, change "version": "1.4.3" to "version": "2.0.0".
Major bump: skill renamed, restructured, breaking changes.
Step 3: Commit
git add zellij-workflow/.claude-plugin/plugin.json
git commit -m "Update zellij-workflow: bump version to 2.0.0 for skill expansion"
Task 5: Smoke test
Step 1: Reinstall plugin
make reinstall-plugin PLUGIN=zellij-workflow
Step 2: Verify in new Claude session
Test these 8 queries (one per domain + one extra for tabs):
- "list zellij sessions" -> expects
zellij list-sessions (Sessions)
- "open new tab with npm test" -> expects
new-tab --name "npm-test" -- npm test (Tabs: Create)
- "go to tab api" -> expects
go-to-tab-name api (Tabs: Navigate)
- "list all panes as json" -> expects
list-panes --json (Panes)
- "toggle floating panes" -> expects
toggle-floating-panes (Floating)
- "dump current layout" -> expects
dump-layout (Layout)
- "edit src/main.rs at line 42" -> expects
zellij edit src/main.rs -l 42 (Edit)
- "send ctrl+c to pane terminal_3" -> expects
send-keys -p terminal_3 "Ctrl c" (I/O)
Step 3: Fix and commit if needed
git add zellij-workflow/
git commit -m "Fix zellij: smoke test corrections"
Zellij Skill Expansion Implementation Plan
Goal: Rewrite
zellij-tab-paneskill intozellijskill covering 7 domains (~48 unique commands) of zellij 0.44, replacing the current 4-mode structure.Architecture: Single mega-skill with domain-based sections. Decision tree at top routes to correct section. Error diagnostics at bottom with three templates (session-required action, session-required top-level, standalone top-level).
Tech Stack: Markdown (SKILL.md), YAML frontmatter, bash code blocks
Key simplification:
write-charscompletely eliminated from skill and commands. All modes usenew-tab -- CMD(verified on zellij 0.44).write-charsnot documented at all — if Claude needs to type into existing pane, it can usesend-keys.Quoting caveat: For Claude session prompts with special characters (quotes,
$, backticks), use an intermediate script viabash -cormktemp. Simple prompts work directly.Timeout policy:
timeout 5removed from all commands. Rationale:new-tab -- CMDis non-blocking (returns immediately after creating tab), unlike the oldwrite-charschain that could hang mid-sequence. Top-level commands (list-sessions,attach) are also fast. If a command hangs, the user can Ctrl+C — an explicit timeout adds complexity without benefit for non-blocking operations.Error handling convention: Three templates based on command type:
zellij action ...and session-required top-level (zellij run,zellij edit) -> check$ZELLIJlist-sessions,attach,kill-session,delete-session) -> no$ZELLIJcheck_rc=$?immediately after||to preserve the original exit codeDomain-specific checks (e.g.
command -v start-issue,command -v claude) go inelifbranches where relevant. Nocommand -v zellijcheck — if the command ran and failed, zellij is in PATH.Task 1: Rename skill directory and write complete SKILL.md
Files:
zellij-workflow/skills/zellij-tab-pane/->zellij-workflow/skills/zellij/zellij-workflow/skills/zellij/SKILL.md(full rewrite)Step 1: Rename directory
Note:
git mvpreserves history and stages the rename automatically. The existingTRIGGER_EXAMPLES.mdis carried over by the rename — Task 3 overwrites it with the expanded version.Step 2: Write YAML frontmatter
Step 3: Write Decision Tree
Step 4: Write Sessions section
Two groups: commands that work anywhere vs commands requiring active session.
Step 5: Write Tabs section
Subsections: Create, Query, Navigate, Manage.
Key:
new-tab -- CMDreplaceswrite-charshack for all modes.NOTE on code format: Commands in SKILL.md should be in
```bash ```code blocks (matching current SKILL.md style), not plain text. The plan shows them inline for brevity.Step 6: Write Panes section
Step 7: Write Floating & Fullscreen section
Step 8: Write Layout section
Step 9: Write Edit section
Step 10: Write Input/Output section
Step 11: Write Examples section
10 examples covering all 7 domains (at least one per domain):
Step 12: Write Error Diagnostics and Dependencies
Three error templates based on command type:
Step 13: Update README.md
Replace
zellij-tab-panewithzellijinzellij-workflow/README.md(skill name and path references).Step 14: Commit
Task 2: Update slash commands to use
new-tab -- CMDFiles:
zellij-workflow/commands/start-issue-in-new-tab.mdzellij-workflow/commands/run-in-new-tab.mdStep 1: Rewrite start-issue-in-new-tab.md
Keep "### 1. Parse issue number" section unchanged. Replace "### 2. Create tab and launch start-issue" —
write-charshack withnew-tab -- CMD:Remove:
sleep 0.3,write-chars,timeout 5.Step 2: Rewrite run-in-new-tab.md
Replace
write-charshack withnew-tab -- CMD. Use--cwdinstead ofcdin script.For simple prompts:
zellij action new-tab --name "$TAB_NAME" --cwd "$PROJECT_DIR" -- claude --dangerously-skip-permissions "$PROMPT" || { _rc=$? if [ -z "$ZELLIJ" ]; then echo "Not in zellij session" elif ! command -v claude &>/dev/null; then echo "claude not found in PATH" else echo "Exit code: $_rc" fi }For complex prompts (keep mktemp script but without
cd):In a new pane (simple prompt):
zellij run -- claude --dangerously-skip-permissions "$PROMPT" || { _rc=$? if [ -z "$ZELLIJ" ]; then echo "Not in zellij session" elif ! command -v claude &>/dev/null; then echo "claude not found in PATH" else echo "Exit code: $_rc" fi }In a new pane (complex prompt):
zellij run -- bash "$SCRIPT" || { _rc=$? if [ -z "$ZELLIJ" ]; then echo "Not in zellij session" elif ! command -v claude &>/dev/null; then echo "claude not found in PATH" else echo "Exit code: $_rc" fi }Remove:
sleep 0.3,write-chars,timeout 5,cdin script,clear+echopreamble.Bump command versions:
1.0.0->2.0.0.Step 3: Commit
git add zellij-workflow/commands/ git commit -m "Update zellij commands: use new-tab -- CMD, remove write-chars"Task 3: Create TRIGGER_EXAMPLES.md
Files:
zellij-workflow/skills/zellij/TRIGGER_EXAMPLES.mdStep 1: Write trigger examples
Minimum 54 positive (6 per domain x 9 categories), 10 negative. EN + RU.
Categories:
Sessions (6):
Tabs - Create (6):
Tabs - Query/Navigate/Manage (6):
Panes - Create (6):
Panes - Query/Manage (6):
Floating/Fullscreen (6):
Layout (6):
Edit (6):
Input/Output (6):
Negative (10):
Step 2: Commit
git add zellij-workflow/skills/zellij/TRIGGER_EXAMPLES.md git commit -m "Add zellij TRIGGER_EXAMPLES.md: 54+ examples across 7 domains"Task 4: Run quality check and bump version
Files:
zellij-workflow/.claude-plugin/plugin.json(version 1.4.3 -> 2.0.0)Step 1: Run skill quality review
Expected: score >= 75/100. If below, fix description/examples and re-run.
Step 2: Bump version
In
plugin.json, change"version": "1.4.3"to"version": "2.0.0".Major bump: skill renamed, restructured, breaking changes.
Step 3: Commit
git add zellij-workflow/.claude-plugin/plugin.json git commit -m "Update zellij-workflow: bump version to 2.0.0 for skill expansion"Task 5: Smoke test
Step 1: Reinstall plugin
Step 2: Verify in new Claude session
Test these 8 queries (one per domain + one extra for tabs):
zellij list-sessions(Sessions)new-tab --name "npm-test" -- npm test(Tabs: Create)go-to-tab-name api(Tabs: Navigate)list-panes --json(Panes)toggle-floating-panes(Floating)dump-layout(Layout)zellij edit src/main.rs -l 42(Edit)send-keys -p terminal_3 "Ctrl c"(I/O)Step 3: Fix and commit if needed
git add zellij-workflow/ git commit -m "Fix zellij: smoke test corrections"