Skill flagged — suspicious patterns detected

ClawHub Security flagged this skill as suspicious. Review the scan results before using.

Tmux Manager

v1.0.0

Manage tmux sessions using the tmux-manager.py script. Use when asked to create, kill, restart, list, or inspect tmux sessions, send commands to sessions, ta...

0· 111·0 current·0 all-time
byRocco De Angelis@rdeangel

Install

OpenClaw Prompt Flow

Install with OpenClaw

Best for remote or guided setup. Copy the exact prompt, then paste it into OpenClaw for rdeangel/tmux-manager.

Previewing Install & Setup.
Prompt PreviewInstall & Setup
Install the skill "Tmux Manager" (rdeangel/tmux-manager) from ClawHub.
Skill page: https://clawhub.ai/rdeangel/tmux-manager
Keep the work scoped to this skill only.
After install, inspect the skill metadata and help me finish setup.
Required binaries: uv, tmux
Use only the metadata you can verify from ClawHub; do not invent missing requirements.
Ask before making any broader environment changes.

Command Line

CLI Commands

Use the direct CLI path if you want to install manually and keep every step visible.

OpenClaw CLI

Bare skill slug

openclaw skills install tmux-manager

ClawHub CLI

Package manager switcher

npx clawhub@latest install tmux-manager
Security Scan
VirusTotalVirusTotal
Suspicious
View report →
OpenClawOpenClaw
Benign
medium confidence
Purpose & Capability
Name/description, required binaries (tmux, uv), script location, and usage all align: this is a tmux session manager that needs tmux and a script runner (uv). The brew installs for tmux and uv are reasonable for the stated functionality.
Instruction Scope
SKILL.md and the script confine behavior to a local YAML config and tmux operations. However the script supports pre/post hooks (run with shell=True) and arbitrary window/ pane commands (sent via tmux send-keys). Those features are expected for this tool but allow arbitrary shell execution and interaction with running sessions — review configs before running.
Install Mechanism
Install spec uses Homebrew formulas (uv, tmux). This is a low-risk, expected install mechanism for macOS/homebrew environments. No downloads from untrusted URLs or archive extraction are present.
Credentials
The skill requests no environment variables or external credentials. It does set tmux-level env vars from the YAML and expands user paths; that is reasonable and proportional to its functionality.
Persistence & Privilege
The skill is user-invocable, not always-enabled, and does not request elevated platform privileges or modify other skills. It will run subprocesses and hooks as the invoking user (normal for this type of utility).
Assessment
This skill appears to do what it says — manage tmux sessions. Before installing or running it, review any tmux-sessions.yaml you will use: the config can contain pre_hook, post_hook, window/pane commands, and env values that will execute as shell commands or be injected into running terminals. Do not run untrusted configs or hooks as a privileged user. Use --dry-run and --validate first, inspect the sample YAML, and ensure uv and tmux are installed from trusted package sources. If you need to harden usage, avoid enabling hooks or limit configs to commands you control.

Like a lobster shell, security has layers — review code before you run it.

Runtime requirements

💻 Clawdis
Binsuv, tmux

Install

Install uv (brew)
Bins: uv
brew install uv
Install tmux (brew)
Bins: tmux
brew install tmux
latestvk977bcr8rk94qjajxn314dm0e983a1qq
111downloads
0stars
1versions
Updated 1mo ago
v1.0.0
MIT-0

tmux-manager

Manages tmux sessions from a YAML config file. The script and its default config live together — the script always looks for tmux-sessions.yaml in the same directory as itself.

Script: {baseDir}/scripts/tmux-manager.py Default config: {baseDir}/scripts/tmux-sessions.yaml Sample config: {baseDir}/scripts/tmux-sessions.yaml.sample

To deploy: copy tmux-manager.py to any directory, place a tmux-sessions.yaml next to it, and run it with uv run from anywhere.


Usage

uv run {baseDir}/scripts/tmux-manager.py (--all | -s SESSION [...] | --session-group GROUP [...] [--window-group GROUP [...]] | --window-group GROUP [...]) [--kill | --restart] [--dry-run] [--list] [--config FILE]
uv run {baseDir}/scripts/tmux-manager.py --send-keys -s SESSION[:WINDOW] COMMAND
uv run {baseDir}/scripts/tmux-manager.py --tail -s SESSION[:WINDOW]
uv run {baseDir}/scripts/tmux-manager.py --validate [--config FILE]
uv run {baseDir}/scripts/tmux-manager.py --list-groups [--config FILE]

Flags

Selectors

FlagMeaning
--allTarget every session in the config
--session-group GROUPTarget sessions by session_group (repeatable, comma-separated) — all windows created
--window-group GROUPFilter to only matching windows (repeatable, comma-separated) — can be combined with --session-group
-s SESSIONTarget a specific session by name (repeatable)

--all and -s are mutually exclusive with everything else. --session-group and --window-group can be used together to scope both sessions and windows.

Actions — default is create

FlagMeaning
(no action flag)Create targeted sessions; skip ones already running
--killKill targeted sessions
--restartKill then recreate targeted sessions
--listShow status table (running/stopped) — no changes made
--dry-runPreview what would happen — no changes made

Output / Inspection

FlagMeaning
--tail -s SESSION[:WINDOW]Stream live pane output (Ctrl+C to stop)

Send Commands

FlagMeaning
--send-keys -s SESSION[:WINDOW] "cmd"Send a shell command to a running session or specific window

Config & Validation

FlagMeaning
--config FILEUse an alternative config file
--validateCheck config for errors and warnings (no selector needed)
--list-groupsList all session groups and window groups (no selector needed)

Examples

uv run {baseDir}/scripts/tmux-manager.py --all                              # create all sessions
uv run {baseDir}/scripts/tmux-manager.py --all --kill                       # kill all sessions in config
uv run {baseDir}/scripts/tmux-manager.py --all --restart                    # restart all sessions
uv run {baseDir}/scripts/tmux-manager.py --all --dry-run                    # preview what would be created
uv run {baseDir}/scripts/tmux-manager.py --all --list                       # list status of all sessions
uv run {baseDir}/scripts/tmux-manager.py --session-group work                     # create sessions in session-group 'work'
uv run {baseDir}/scripts/tmux-manager.py --session-group work --restart           # restart sessions in session-group 'work'
uv run {baseDir}/scripts/tmux-manager.py --session-group work --list              # list status of sessions in session-group 'work'
uv run {baseDir}/scripts/tmux-manager.py --kill --session-group work              # kill all sessions in session-group 'work'
uv run {baseDir}/scripts/tmux-manager.py --window-group dev                       # create sessions, only 'dev' windows
uv run {baseDir}/scripts/tmux-manager.py --window-group dev --restart             # restart with only 'dev' windows
uv run {baseDir}/scripts/tmux-manager.py --window-group claude,gemini             # multiple groups, comma-separated
uv run {baseDir}/scripts/tmux-manager.py --window-group claude --window-group gemini  # equivalent
uv run {baseDir}/scripts/tmux-manager.py --session-group TargetTracer,N8N --window-group claude,gemini  # combined
uv run {baseDir}/scripts/tmux-manager.py -s my-session                            # create only my-session
uv run {baseDir}/scripts/tmux-manager.py --kill -s my-session                     # kill only my-session
uv run {baseDir}/scripts/tmux-manager.py --restart -s my-session                  # restart only my-session
uv run {baseDir}/scripts/tmux-manager.py --send-keys -s my-session "cmd"               # send to active window
uv run {baseDir}/scripts/tmux-manager.py --send-keys -s my-session:claude "cmd"        # send to specific window
uv run {baseDir}/scripts/tmux-manager.py --tail -s my-session                     # stream live pane output
uv run {baseDir}/scripts/tmux-manager.py --validate                               # validate config file
uv run {baseDir}/scripts/tmux-manager.py --list-groups                            # list all groups
uv run {baseDir}/scripts/tmux-manager.py --all --config ~/my-sessions.yaml        # use a specific config

Behaviour Notes

  • Idempotent creates — sessions already running are skipped. Use --restart to force recreate.
  • --kill requires a selector — use --all --kill to kill everything managed by this config.
  • --tail / --send-keys accept only a single -s SESSION[:WINDOW] target.
  • SESSION[:WINDOW] — append :windowname to target a specific window, e.g. my-session:claude. Without it, the active window is used.
  • --validate does not require a selector — warns on unknown fields, catching typos like window_grou or sesion_group.
  • --list-groups does not require a selector — reads config only.
  • pre_hook / post_hook run on the host shell, not inside tmux.
  • pre_hook_fail: abort — stops session creation if the pre_hook exits non-zero. Default is warn (prints warning, continues).
  • --window-group — sessions already running are skipped unless --restart is used. On restart, only the matching windows are created.
  • --session-group + --window-group combined — narrows to the specified sessions first, then opens only the matching windows within them.
  • Sessions without a session_group are only reachable via --all or -s.

Native tmux equivalents

These operations don't need a wrapper — use tmux directly:

OperationNative command
Kill all tmux sessionstmux kill-server
Snapshot pane outputtmux capture-pane -p -t SESSION[:WINDOW]

Sample Config (tmux-sessions.yaml.sample)

sessions:

  # ── Project session (no env vars) ─────────────────────────────────────────
  - name: Project_1
    session_group: Project_1
    working_dir: ~/Projects/Project_1
    # focus: claude             # which window to select after creation (optional)
    windows:
      - name: claude
        window_group: claude    # targeted by: --window-group claude
        command: "claude --dangerously-skip-permissions --continue"
      - name: gemini
        window_group: gemini    # targeted by: --window-group gemini
        command: "gemini -y --resume"
      - name: shell             # no window_group — only opened via --session-group or --all
        # no command = opens a plain shell

  # ── Project session (with env vars) ───────────────────────────────────────
  - name: Project_2
    session_group: Project_2
    working_dir: ~/Projects/Project_2
    env:
      NODE_ENV: development
      PORT: 3000
    windows:
      #- name: server           # uncomment to add a dev server window
      #  command: "npm run dev"
      - name: claude
        window_group: claude
        command: "claude --dangerously-skip-permissions --continue"
      - name: gemini
        window_group: gemini
        command: "gemini -y --resume"
      - name: shell
        window_group: shell
        # no command = opens a plain shell

  # ── Single-window utility session ─────────────────────────────────────────
  - name: monitoring
    session_group: system
    working_dir: ~
    command: "htop"

Full Config Reference

FieldLevelDescription
namesessionRequired. Must be unique.
session_groupsessionOptional. String or list. Used with --session-group — targets the whole session. A session can belong to multiple groups.
working_dirsession / windowStarting directory. Window value overrides session.
focussessionWindow name to select after creation.
pre_hooksessionShell command run before session is created.
pre_hook_failsessionwarn (default) or abort — whether a failed pre_hook stops session creation.
post_hooksessionShell command run after session is created.
envsession / windowMap of env vars. Window env sent as export statements.
commandsession / windowProgram to run. On session level, creates a single-window session.
windowssessionList of windows. Overrides session-level command.
window_groupwindowOptional. String or list. Used with --window-group — only matching windows are created. A window can belong to multiple groups.
paneswindowList of panes to split the window into. Each can have command and working_dir.
layoutwindowPane layout: tiled, even-horizontal, even-vertical, main-horizontal, main-vertical.

Comments

Loading comments...